Получить все папки Google Drive API на Android

Я использую новый API Google Drive, и я не могу получить все папки с моего Google Drive, я получаю только те папки, которые я создаю с API Google Drive... Кто-нибудь знает, почему это происходит?

это мой код:

@Override
    protected void onResume() {
        super.onResume();
        if (mGoogleApiClient == null) {
            // Create the API client and bind it to an instance variable.
            // We use this instance as the callback for connection and connection
            // failures.
            // Since no account name is passed, the user is prompted to choose.
            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addApi(Drive.API)
                    .addScope(Drive.SCOPE_FILE)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .build();
        }
        // Connect the client. Once connected, the camera is launched.
        mGoogleApiClient.connect();
    }


    /**
     * Handles resolution callbacks.
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode,
                                    Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_RESOLUTION && resultCode == RESULT_OK) {
            mGoogleApiClient.connect();

        }
    }

    /**
     * Called when activity gets invisible. Connection to Drive service needs to
     * be disconnected as soon as an activity is invisible.
     */
    @Override
    protected void onPause() {
        if (mGoogleApiClient != null) {
            mGoogleApiClient.disconnect();
        }
        super.onPause();
    }

    /**
     * Called when {@code mGoogleApiClient} is connected.
     */
    @Override
    public void onConnected(Bundle connectionHint) {
        Log.i(TAG, "GoogleApiClient connected");

        rootFolder = Drive.DriveApi.getRootFolder(mGoogleApiClient);

       rootFolder.listChildren(getGoogleApiClient()).setResultCallback(pruebaChildren);

    }


    ResultCallback<DriveApi.MetadataBufferResult> pruebaChildren = new
            ResultCallback<DriveApi.MetadataBufferResult>() {
                @Override
                public void onResult(DriveApi.MetadataBufferResult metadataBufferResult) {
                    if (!metadataBufferResult.getStatus().isSuccess()) {
                        showMessage("Problem while retrieving files");
                        return;
                    }
                    Log.i(TAG,"got root folder");
                    MetadataBuffer buffer = metadataBufferResult.getMetadataBuffer();
                    Log.i(TAG,"Buffer count  " + buffer.getCount());
                    if(buffer.getCount() == 0){
                        createFolderApp();
                    }
                    else{
                        for(Metadata m : buffer){
                            Log.i(TAG,"Metadata name  " + m.getTitle() + "(" + (m.isFolder() ? "folder" : "file") + ")");
                            if (m.isFolder() && m.getTitle().equals(TAG)){
                                Log.i(TAG,"APP FOLDER FOUND");
                                Drive.DriveApi.getFolder(mGoogleApiClient, m.getDriveId())
                                        .listChildren(mGoogleApiClient)
                                        .setResultCallback(foreachAppAplication);
                            }
                        }
                    }
                    return;
                }
            };

И теперь я хочу видеть все папки в rootFolder Drive, я пробую requestSync(), но результат тот же... Мне нужна помощь, пожалуйста!

И еще вопрос: как мне установить AppFolder? Я вижу только getAppFolder, но как я могу установить??

Спасибо

1 ответ

Решение

По своему дизайну GDAA поддерживает только область ФАЙЛ, т.е. он будет находить / перечислять только папки / файлы, созданные приложением Android.

Есть 2 способа обойти это:

  1. Используйте одно из намерений GDAA, в основном позволяя пользователю выбрать файл / папку. Таким образом, оно станет доступным для вашего приложения.
  2. Используйте другой API, REST Api, который поддерживает область DRIVE, предоставляя вашему приложению полный набор файлов / папок.

Если вы хотите изучить поведение двух API, я разместил на Github две разные демонстрации (демонстрационные оболочки REST и GDAA CRUD).

Вторая часть вашего вопроса не имеет ответа. Вы не устанавливаете папку приложения, вы можете только получить ее идентификатор DriveFolder. Вы используете его для создания / извлечения объектов.

  DriveFolder appFldr = Drive.DriveApi.getAppFolder(mGooleApiClient);
  appFldr.createFile(...);
  appFldr.createFolder(...);
  appFldr.listChildren(...);
  appFldr.queryChildren(...);

... и не забудьте добавить область действия SCOPE_APPFOLDER

Удачи

Другие вопросы по тегам