android - 不同配置文件的查询 Intent Activity : Android for Work

标签 android android-intent android-package-managers android-for-work

由于某些技术原因,我无法使用 Android File Picker 将文件及其内容放入我的应用程序中。这就是为什么我想出了一个解决方案来查询 Intent 并在我自己的 UI 上处理结果。

下面是我如何使用 Intent.ACTION_GET_CONTENT 获取应用程序列表

/* Create a new Intent to Read a File */
Intent documentIntent = new Intent(Intent.ACTION_GET_CONTENT);
documentIntent.setType((action == ACTION_SELECT_FILE) ? "*/*" : "image/*");

/* Query for Applications to see which are available */
List<ResolveInfo> appList = getActivity().getPackageManager().queryIntentActivities(documentIntent, PackageManager.MATCH_DEFAULT_ONLY);

这工作正常并列出了可以处理我的请求的应用程序。

但我正在使用 Android for Work,当我执行上面的代码时,我只获得了可用于 Work Profile 的应用程序列表,这是预期的。

但是从上面的代码返回的结果之一是“切换到个人”,它列出了安装在Android 文件选择器个人帐户中的应用程序.

所以问题是,我怎样才能获得相同的行为?如何从个人资料中查询意向 Activity ?

最佳答案

我不太了解Android for Work , 但它在 Developer Guide 中提到那个

The Android system prevents intents from crossing profiles and IT administrators can enable or disable system apps.

所以我的猜测是,您无法从安装在工作配置文件中的应用程序访问/启动个人配置文件中的 Activity ,反之亦然-反之亦然。

但如this StackOverflow post中所述,如果您的应用程序是 Device Policy Controller ,那么您可以实现DevicePolicyManager#clearCrossProfileIntentFilters(ComponentName admin)并允许 Intent 跨配置文件。

另一个考虑因素是跨配置文件共享文件,文档指出开发人员在共享时应使用Content URIs 而不是File URIs配置文件之间的路径。您可以阅读更多相关信息 here .

关于android - 不同配置文件的查询 Intent Activity : Android for Work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48714882/

相关文章:

android - 如何在不使用包管理器的情况下获取启动器 Activity/Intent (用于自包)

android - 以编程方式安装/卸载 APK(PackageManager 与 Intents)

android - 检测默认启动器,android

java - 根据先前选择的在 RecyclerView 中设置复选框

android - 如何在 android 中查找第三方应用程序内容提供商 URI?

android - 在 Android studio 项目命令 'C:\Program Files\Java\jdk1.7.0_25\bin\java.exe' 中获取错误'以非零退出值 2 完成

java - 调用 Intent 时应用程序关闭

Android Studio,drawable仅在 Debug模式下可用

java - 在 Activity 生命周期中何时可以测量 UI 元素?

android - 如何检查是否有可以打开某个文件的应用