使用Android Drive SDK从Google云端硬盘下载“应用数据”文件

时间:2013-04-07 23:05:13

标签: android google-drive-api

我有谷歌驱动器sdk快速启动Android启动并运行。

我要做的是扩展应用程序,以便能够在驱动器上传一个新的应用程序数据'文件夹,并能够再次下载此文件(在android devies之间同步配置文件)

上传文件可以正常工作。但是当我尝试下载相同的文件时,我可以获得其元数据,如fileID,fileTitle,fileDownloadURL等,但无法下载内容。我在尝试时收到401 Unauthorized错误。

我是美国的AUTH SCOPE" https://www.googleapis.com/auth/drive.appdata"访问appdata。

任何想法为什么会这样?

2 个答案:

答案 0 :(得分:3)

只使用drive.appdata范围时,我可以重现这一点。如果我添加另一个驱动器范围,例如drive.readonly范围,则可以正常工作。

我同意这是一个错误(或者至少是令人惊讶的行为),所以我会提出一个,但请立即使用上面的解决方法。

答案 1 :(得分:0)

尝试以下代码来检索内容

public void retrieveContents(DriveFile file) {
        // [START drive_android_open_file]
        Task<DriveContents> openFileTask =
                getDriveResourceClient().openFile(file, DriveFile.MODE_READ_ONLY);
        // [END drive_android_open_file]
        // [START drive_android_read_contents]


        openFileTask.continueWithTask(new Continuation<DriveContents, Task<Void>>() {
            @Override
            public Task<Void> then(@NonNull Task<DriveContents> task) throws Exception {
                DriveContents contents = task.getResult();
                // Process contents...
                // [START_EXCLUDE]
                // [START drive_android_read_as_string]
                try (BufferedReader reader = new BufferedReader(
                        new InputStreamReader(contents.getInputStream()))) {
                    StringBuilder builder = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        builder.append(line).append("\n");
                    }

                    Log.e("result ", builder.toString());
                }
                // [END drive_android_read_as_string]
                // [END_EXCLUDE]
                // [START drive_android_discard_contents]
                Task<Void> discardTask = MainActivity.this.getDriveResourceClient().discardContents(contents);
                // [END drive_android_discard_contents]
                return discardTask;
            }
        })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {

                    }
                });

        // [END drive_android_read_contents]
    }