查询不同配置文件的意图活动:Android for Work

6

由于某些技术原因,我无法使用Android文件选择器将文件及其内容获取到我的应用程序中。因此,我想出了一个解决方案,通过查询意图并在自己的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,当我执行上面的代码时,我只得到了可用于工作个人资料的应用程序列表,这是预期的结果。

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

所以问题是,我如何获得相同的行为?如何从个人资料中查询意图活动?


请纠正我如果我错了,但我猜你想做的是在个人资料中安装一个应用程序[任何应用程序],然后从运行在工作资料中的应用程序中启动它?是这样吗? - riyaz-ali
@riyaz-ali 差不多。我正在尝试获取个人资料中可以处理 GET_CONTENT 操作的应用程序列表。这样我就可以启动(例如文件浏览器应用程序)并从该应用程序获取数据,使其在工作资料下运行的我的应用程序正常工作。 - osayilgan
1个回答

0

我对Android for Work没有太多的了解,但在开发者指南中提到:

Android系统会阻止跨配置文件的意图,IT管理员可以启用或禁用系统应用程序。

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

但正如这篇StackOverflow帖子中所述,如果您的应用程序是设备策略控制器,则可以实现{{link5:DevicePolicyManager#clearCrossProfileIntentFilters(ComponentName admin)}}并允许意图跨配置文件。

另一个需要考虑的问题是在不同配置文件之间共享文件,文档中指出开发者应该使用内容URI而不是文件URI来共享路径。你可以在这里阅读更多相关信息here

感谢您的评论,但问题实际上并不涉及设备策略控制器应用程序或文件提供程序(内容URI与文件路径)。而且在工作和个人资料之间发送数据是可能的。通常,Google使用IntentForwarder将意图从工作配置文件转发到个人配置文件。但不幸的是,这些方法具有“隐藏”注释,因此我们无法访问它们,我也不想创建解决方法来公开这些方法。 - osayilgan
我猜这就是文档所说的“系统防止意图跨越配置文件”的意思。我相信你所说的有一个桥梁,但要访问它,你需要实现DevicePolicyManager。顺便说一句,这只是猜测,也许你可以在这里提供更多细节。 - riyaz-ali
谷歌使用IntentForwarder将意图从工作配置文件转发到个人配置文件。你能引用一些来源,比如代码或其他东西吗? - riyaz-ali
DevicePolicyManager是为设备所有者或管理员设计的,适用于MDM提供商,而不适用于在工作配置文件下运行的应用程序。使用设备策略管理器,您可以过滤您组织中的“用户”可以访问或无法访问的应用程序。这不是我们的主题。在我的问题中,我对查询个人资料中可用意图感兴趣。因此,如果设备所有者或管理员阻止应用程序,则用户将无法在查询结果中获取它们。 - osayilgan
对于IntentForwarder,我在源代码中找到了它。如果按照我的问题所述进行QueryIntentActivities调试,你将得到其中一个结果是“切换到个人模式”。如果调试此结果,你将看到Intent的详细信息,其中IntentForwarder可以作为该Intent的目标找到。 - osayilgan
所以系统应用程序可以使用这种方法,我的问题是想知道我们是否有类似的方式。 - osayilgan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接