【问题标题】:How to get Google Drive to show with queryIntentActivities()?如何使用 queryIntentActivities() 让 Google Drive 显示?
【发布时间】:2016-07-18 22:47:45
【问题描述】:

在我们的应用中,我们尝试从其他文件存储应用中获取文件。例如,打开我们的应用,启动应用选择器,选择保管箱,选择文件,在我们的应用中打开文件。

我已设置此意图以尝试调​​用其他应用:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

PackageManager packageManager = getPackageManager();
List activities = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

重要的部分是queryIntentActivities,我们使用返回的应用列表来显示用户可以选择的应用。 Dropbox 和 Microsoft OneDrive 等应用程序显示没有问题,但我的 Google Drive 从未显示。

为了让 Google Drive 返回 queryIntentActivities,我需要设置什么?

【问题讨论】:

  • 任何解决方案?,我面临同样的问题。

标签: android android-intent android-activity google-drive-api android-package-managers


【解决方案1】:

在 Android KitKat (API 19) 和更高版本的设备上,应用可以使用Storage Access Framework 并构建DocumentsProvider。在这些情况下,系统 UI 会在您使用 ACTION_GET_CONTENT Intent 调用 startActivity() 时提供 UI - 应用不需要实现自己的 UI,也不需要直接处理 GET_CONTENT 的 Activity。

由于系统 UI 提供对使用存储访问框架的应用程序和仅提供 GET_CONTENT Activity 的旧版应用程序的访问权限,因此您应该拥有自己的应用程序选择器,而只需直接执行ACTION_GET_CONTENT Intent,它将适用于所有应用程序(如果您设置了 EXTRA_ALLOW_MULTIPLE 标志,则允许用户从多个 DocumentsProviders 中选择文件,而不是仅从单个应用程序中选择文件)。

【讨论】:

  • 我查看了存储访问框架,它似乎应该适用于我们正在做的事情,但我也应该澄清一下,我们支持 API 14+,我们只需要短期访问文档。看起来ACTION_GET_CONENT 仍然是我们应该为 14+ 使用的。那么我想我的问题是 Google Drive 是否支持ACTION_GET_CONTENT?我看到的所有答案都说不,但它们已经有几年了。
  • 是的,如果你只是想临时访问一个文件,你绝对应该使用ACTION_GET_CONTENT。你做的太多了 - ACTION_GET_CONTENT 拉出一个 UI,允许用户从 any 应用程序中选择具有过滤 GET_CONTENT 的 Activity DocumentsProvider。只需启动您构建的Intent,您就会看到它们全部列出。请记住,由于需要权限,只有系统 UI 可以从 DocumentsProviders 读取,因此您永远无法在您的应用中构建相同的列表。
  • @ianhanniballake 你能分享一些代码吗?
【解决方案2】:

将数据 URI 设置为意图,然后检查 queryIntentActivity。

下面的代码sn-p,也将Google Drive作为ChooserIntent。

val packageManager = context.packageManager
val intent = Intent(Intent.ACTION_VIEW)
intent.setDataAndType(uri, "application/pdf")
        if (packageManager.queryIntentActivities(
                intent,
                PackageManager.MATCH_DEFAULT_ONLY
            ).size > 0) {
            // PDF reader exists
            return true
        }
        // No PDF reader
        return false
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多