在 Android 上获取所有文件夹 google drive api

我使用新的 Google drive api,但无法从我的 google drive 中获取所有文件夹,我只能获取使用 google drive api 创建的文件夹...有人知道为什么会这样吗?

I use the new Google drive api and I can't get All folders from my google drive, I only get the folders that I create with the google drive api... Anybody know why happens this?

这是我的代码:

@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() 但结果是一样的......我需要帮助!

And now I want see all folders in rootFolder Drive, I try the requestSync() but the result is same... I need help please!

还有一个问题:如何设置 AppFolder?我只看到 getAppFolder 但如何设置??

And another question: How I can set the AppFolder? I only see getAppFolder but How I can set ??

谢谢

推荐答案

根据设计,GDAA 仅支持FILE 范围,即它将仅查找/列出 Android 应用创建的文件夹/文件.

By design, GDAA supports only the FILE scope, i.e. it will find / list only folders / files created by the Android app.

有两种解决方法:

  1. 使用 GDAA 的 intents 之一,基本上让用户选择文件/文件夹.这样,您的应用就可以使用它.
  2. 使用不同的 API,即 REST Api,它支持 DRIVE 范围,为您的应用提供完整的一组文件/文件夹.
  1. Use one of the intents of the GDAA, basically letting the user pick the file / folder. That way it will become available to your app.
  2. Use a different API, the REST Api, which supports the DRIVE scope, giving your app full set of files / folders.

如果您想研究这两个 API 的行为方式,我在 Github 上放了两个不同的演示(REST和 GDAA CRUD 演示包装器).

In case you want to study how the two APIs behave, I've put two different demos on the Github (the REST and the GDAA CRUD demo wrappers).

您问题的第二部分没有答案.您不设置应用程序文件夹,您只能获取它的 DriveFolder id.您可以使用它来创建/检索对象.

The second part of your question does not have answer. You don't set the app folder, you can only get it's DriveFolder id. You use it to create / retrieve objects.

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

...并且不要忘记添加 SCOPE_APPFOLDER 范围

... and don't forget to add the SCOPE_APPFOLDER scope

祝你好运

相关文章