如何使用 queryIntentActivities() 获取 Google Drive 以显示?
How to get Google Drive to show with queryIntentActivities()?
在我们的应用程序中,我们尝试从其他文件存储应用程序获取文件。因此,例如,打开我们的应用程序,启动应用程序选择器,select 保管箱,select 文件,在我们的应用程序中打开文件。
我已将此意图设置为尝试调用其他应用程序:
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
,我们使用这个 returns 的应用程序列表来显示我们的用户可以选择的应用程序。 Dropbox 和 Microsoft OneDrive 等应用程序显示没有问题,但我 Google Drive 从未显示。
我需要在意图中设置什么才能让 Google 驱动器返回 queryIntentActivities
?
在 Android KitKat (API 19) 和更高版本的设备上,应用程序可以使用 Storage Access Framework and build a DocumentsProvider。在这些情况下,当您使用 ACTION_GET_CONTENT
意图调用 startActivity()
时,系统 UI 会提供 UI - 应用程序不需要实现自己的 UI 也有一个直接处理 GET_CONTENT
.
的 Activity
由于系统 UI 提供对使用存储访问框架的应用程序和仅提供 GET_CONTENT
Activity 的旧版应用程序的访问权限,您应该不 拥有自己的应用程序选择器,而不是直接执行 ACTION_GET_CONTENT
Intent,它将适用于所有应用程序(并允许用户 select 来自多个 DocumentsProvider
的文件,而不是如果您设置了 EXTRA_ALLOW_MULTIPLE 标志,则仅来自单个应用。
将数据 URI 设置为意图,然后检查 queryIntentActivity。
下面的代码片段,也将 Google Drive as 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
}
在我们的应用程序中,我们尝试从其他文件存储应用程序获取文件。因此,例如,打开我们的应用程序,启动应用程序选择器,select 保管箱,select 文件,在我们的应用程序中打开文件。
我已将此意图设置为尝试调用其他应用程序:
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
,我们使用这个 returns 的应用程序列表来显示我们的用户可以选择的应用程序。 Dropbox 和 Microsoft OneDrive 等应用程序显示没有问题,但我 Google Drive 从未显示。
我需要在意图中设置什么才能让 Google 驱动器返回 queryIntentActivities
?
在 Android KitKat (API 19) 和更高版本的设备上,应用程序可以使用 Storage Access Framework and build a DocumentsProvider。在这些情况下,当您使用 ACTION_GET_CONTENT
意图调用 startActivity()
时,系统 UI 会提供 UI - 应用程序不需要实现自己的 UI 也有一个直接处理 GET_CONTENT
.
由于系统 UI 提供对使用存储访问框架的应用程序和仅提供 GET_CONTENT
Activity 的旧版应用程序的访问权限,您应该不 拥有自己的应用程序选择器,而不是直接执行 ACTION_GET_CONTENT
Intent,它将适用于所有应用程序(并允许用户 select 来自多个 DocumentsProvider
的文件,而不是如果您设置了 EXTRA_ALLOW_MULTIPLE 标志,则仅来自单个应用。
将数据 URI 设置为意图,然后检查 queryIntentActivity。
下面的代码片段,也将 Google Drive as 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
}