【问题标题】:Google Drive API for Android - Only Drive.SCOPE_FILE access, need read only适用于 Android 的 Google Drive API - 仅 Drive.SCOPE_FILE 访问权限,需要只读
【发布时间】:2014-04-10 13:47:30
【问题描述】:

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

我已经下载了新的 SDK,获得了我的应用程序的全部授权等。 我使用示例选择了一个带有打开器的文件夹,然后在 Listview 中显示内容。

BUT - NO 个文件被显示。它只显示所选文件夹中的任何子文件夹。

看来新的 SDK 似乎只有 SCOPE_FILE 访问权限,据我所知,它只允许应用查看它创建的文件或用户自己选择的文件。

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

从进一步阅读来看,我似乎必须使用 REST Java API(或其他东西),这将使我能够获得对文件和元数据的只读访问权限。

问题是,我很难找到我需要的 Jar 文件等,以及我应该把它们放在哪里。

记住,我是新手。

我正在使用 Android Studio,谁能告诉我:

  • 我需要哪些 JAR 文件

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

  • 是否需要编辑 build.gradle 以包含它们?

  • 任何授权示例?

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

  • 我是否需要新的 SDK?

感谢您对此的任何帮助。

【问题讨论】:

  • 感谢我已经阅读了该内容以及几篇文章。但我对我需要做什么感到困惑。
  • 有人知道怎么做吗?
  • 我对 Google API 的糟糕程度感到惊讶。我遇到了完全相同的问题,它使 Java API 无用。我什至不确定 JSON API 是否能够做到这一点。和 new MetadataChangeSet.Builder().setTitle("New folder").build() 创建文件夹?什么样的智障猴子发明了这种可憎的东西?
  • 你弄明白了吗?我也有同样的问题。

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


【解决方案1】:

好吧,该死的 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 APIs 7.5.0 上试过这个,在这个延迟的 API 上浪费了两个小时。我相信 Java API 无法正确处理这个问题,我们需要使用 JSON API 来处理。

编辑:我发现了这个关于如何使用另一个 Java API 访问 Google Drive 的非常好的教程: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)

爱丽丝梦游仙境有人吗?

【讨论】:

  • 我觉得你是兄弟。
猜你喜欢
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多