Google Drive API-Android-Как получить идентификатор файла диска?

Я пытаюсь разработать приложение для android, которое может читать xml-файл, хранящийся в моей папке Google drive, идея сначала пытается открыть файл и обработать содержимое.

я прочитала Google Drive API docs для android и я дошел до того, что я потерялся, он работает с содержимым файла.

в соответствии с этим руководством способ открыть файл с диска таков:

DriveFile file = ...
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallback);`

Поиск я понял, что полный код (что они не включить есть):

DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient,DriveId.bg(id));
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallback);`

Ну проблема в том, что я не знаю, файл "код". Я пробовал id из веб-ссылки google drive, что-то вроде этого (https://drive.google.com/open?id=1EafJ-T6H4xI9VaUuUO5FMVb9Y30xyr7OHuISQ53avso&authuser=0 но не сработало.

3 ответов


вы можете использовать метод запроса DriveAPI, чтобы получить любую информацию о конкретном файле. необходимо определить объект запроса следующим образом:

Query query = new Query.Builder()
    .addFilter(Filters.eq(SearchableField.TITLE, "HelloWorld.java"))
    .build();

и установите функцию обратного вызова для итерации по результатам:

Drive.DriveApi.query(googleApiClient, query)
        .setResultCallback(new OnChildrenRetrievedCallback() {

    @Override
    public void onChildrenRetrieved(MetadataBufferResult result) {
        // Iterate over the matching Metadata instances in mdResultSet
    }
});

более подробную информацию по теме вы можете найти здесь:https://developers.google.com/drive/android/queries


решением, которое я нашел для этой проблемы, было создание файла из приложения. Использование класса ("CreateFileActivity.java") из приложения Google drive api demo.

С этим классом я сохраняю возвращаемый Driveid из нового файла в глобальной переменной DriveId.

final private ResultCallback<DriveFolder.DriveFileResult> fileCallback = new
        ResultCallback<DriveFolder.DriveFileResult>() {
            @Override
            public void onResult(DriveFolder.DriveFileResult result) {
                if (!result.getStatus().isSuccess()) {
                    Log.e("","Error while trying to create the file");
                    return;
                }
                Id=result.getDriveFile().getDriveId();
                Log.e("","Created a file with content: " + Id);

            }
        };

затем с этим идентификатором в другом методе я вызываю файл и читаю его (если я хочу, я могу редактировать эту информацию о файле из Google Drive Web App):

 public void leer(){
       DriveFile file = Drive.DriveApi.getFile(getGoogleApiClient(),Id);
       file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null)
               .setResultCallback(contentsOpenedCallback);
   }
ResultCallback<DriveApi.DriveContentsResult> contentsOpenedCallback =
        new ResultCallback<DriveApi.DriveContentsResult>() {
            @Override
            public void onResult(DriveApi.DriveContentsResult result) {
                if (!result.getStatus().isSuccess()) {
                    Log.e("Error:","No se puede abrir el archivo o no se encuentra");
                    return;
                }
                // DriveContents object contains pointers
                // to the actual byte stream
                DriveContents contents = result.getDriveContents();
                BufferedReader reader = new BufferedReader(new InputStreamReader(contents.getInputStream()));
                StringBuilder builder = new StringBuilder();
                String line;
                try {
                    while ((line = reader.readLine()) != null) {
                        builder.append(line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                String contentsAsString = builder.toString();
                Log.e("RESULT:",contentsAsString);
            }
        };

Я играл с этим несколько месяцев назад, и у меня все еще есть код на github. Может быть!--1-->очень устаревший (libver 15 или около того), но он может служить точкой отсчета, и это (я надеюсь, просто). посмотреть здесь. Опусти его, подключи, проходи. Исправить то, что больше не работает :-). Я бросил его некоторое время назад.

имейте в виду, что для объектов Google Drive Android API есть 2 разных идентификатора, см. так 22841237.

В общем, вы обычно начинаете с зная имя файла / папки, запрос GDAA, чтобы получить список объектов. Каждый из них даст DriveID и ResourceID. DriveID используется в вашем приложении для управления объектами (не означает ничего за пределами вашего Android-приложения и/или устройства). ResourceID-это строка, которая отображается в различных формах в URL-адресах и может использоваться вне вашего приложения (например, веб-браузера...). Посмотри на это!--11-->фантик чтобы получить некоторое чувство, как это завод. Но опять же, это было несколько версий назад, поэтому нет никаких гарантий. удача...