适用于Android的Google Drive API - 仅限Drive.SCOPE_FILE访问权限,需要只读

时间:2014-04-10 13:47:30

标签: android google-drive-api google-drive-android-api

所以我有点新手,我希望列出Google云端硬盘中的所有文件和文件夹。

我已经下载了新的SDK,我的应用程序都获得了授权等。 我使用示例选择带有开启工具的文件夹,然后在Listview中显示内容。

但是 - NO 文件已显示。它仅显示所选文件夹中的所有子文件夹。

所以新的SDK似乎只有SCOPE_FILE访问权限,我收集的只允许应用程序查看它创建的文件,或者用户自己选择的文件。

但是因为我需要能够列出给定文件夹中的所有文件和文件夹,所以这对我来说根本不起作用。

从进一步阅读开始,我似乎必须使用REST Java API(或其他东西),这样我就可以获得对文件和元数据的只读访问权。

问题是,我无法根据Jar文件等找到我需要的内容,以及我应该放在哪里。

请记住,我对这一切都不熟悉。

我使用Android Studio,有人可以告诉我:

  • 我需要的是哪些JAR文件

  • 我应该放在哪里(在libs文件夹中?)

  • 我是否需要编辑build.gradle才能包含它们?

  • 任何授权示例?

  • 以及列出文件和文件夹的示例,例如在ROOT文件夹中

  • 我是否需要新的SDK?

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:6)

好的,该死的Java API显然不支持访问所有文件所需的https://www.googleapis.com/auth/drive范围。我试过这个:

    googleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Drive.API)
            .addScope(new Scope("https://www.googleapis.com/auth/drive"))
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();

结果是“来自Google API的未知错误”以及日志中的例外情况:

06-30 14:11:48.803   3023-29855/? E/ClientConnectionOperation﹕ Handling authorization failure
com.google.android.gms.drive.auth.c: Authorization failed: Unsupported scope: https://www.googleapis.com/auth/drive
        at com.google.android.gms.drive.auth.g.a(SourceFile:77)
        at com.google.android.gms.drive.api.g.<init>(SourceFile:226)
        at com.google.android.gms.drive.api.a.k.a(SourceFile:46)
        at com.google.android.gms.common.service.g.run(SourceFile:178)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)`

然后我尝试了另一个范围:https://www.googleapis.com/auth/drive.readonly哪个方法不起作用:

06-30 14:12:25.082   3023-29981/? E/ClientConnectionOperation﹕ Handling authorization failure
com.google.android.gms.drive.auth.c: Authorization failed: No valid Drive authorization scope provided.
        at com.google.android.gms.drive.auth.g.a(SourceFile:87)
        at com.google.android.gms.drive.api.g.<init>(SourceFile:226)
        at com.google.android.gms.drive.api.a.k.a(SourceFile:46)
        at com.google.android.gms.common.service.g.run(SourceFile:178)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:818)

在Google API 7.5.0上尝试过此操作,并在此延迟API上浪费了两个小时。我相信Java API无法正确处理这个问题,我们需要使用JSON API执行此操作。

编辑:我找到了关于如何使用其他Java API访问Google云端硬盘的非常好的教程:https://developers.google.com/drive/web/quickstart/java 不幸的是,它无法在Android上运行:

   Caused by: java.security.NoSuchAlgorithmException: KeyStore JKS implementation not found
        at org.apache.harmony.security.fortress.Engine.notFound(Engine.java:190)
        at org.apache.harmony.security.fortress.Engine.getInstance(Engine.java:139)
        at java.security.KeyStore.getInstance(KeyStore.java:116)

在com.google.api.client.util.SecurityUtils.getJavaKeyStore(SecurityUtils.java:53)

爱丽丝梦游仙境?