【问题标题】:Query Intent Activities for Different Profiles : Android for Work查询不同配置文件的意图活动:Android for Work
【发布时间】:2018-02-09 22:15:09
【问题描述】:

由于某些技术原因,我无法使用 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,当我执行上面的代码时,我只获得了 Work Profile 可用的应用程序列表,这是预期的。

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

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

【问题讨论】:

  • 如果我错了,请纠正我,但我猜您正在尝试使用安装在个人资料中的应用程序 [任何应用程序],然后从您在工作资料中运行的应用程序启动它?是这样吗?
  • @riyaz-ali 有点像。我正在尝试获取可以在个人资料中处理 GET_CONTENT 操作的应用程序列表。所以我可以启动它(例如文件资源管理器应用程序)并将数据从这个应用程序获取到我在工作配置文件下工作的应用程序中。

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


【解决方案1】:

我对@9​​87654321@ 不太了解,但在Developer Guide 中提到过

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

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

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

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

【讨论】:

  • 感谢您的 cmets,但问题不在于 Device Policy Controller 应用程序或 FileProvider(内容 URI 与文件路径)。并且可以在工作和个人资料之间发送数据。通常,Google 使用 IntentForwarder 将 Intent 从 Work 转发到 Personal Profile。但不幸的是,这些方法有“隐藏”注释,所以我们无法访问它们,我真的不想创建一个解决方法来公开这些方法。
  • 我想这就是当文档说“系统阻止意图跨越配置文件”时的意思。我确信有你所说的桥,但要访问你需要实现DevicePolicyManager。附言只是推测,也许你可以在这里提供更多细节。
  • Google uses IntentForwarder for forwarding Intents from Work to Personal Profile。你能引用一些来源,比如代码或其他东西吗?
  • DevicePolicyManager 适用于设备所有者或管理员,适用于 MDM 提供商,不适用于工作配置文件下的应用程序。使用设备策略管理器,您可以过滤组织中的“用户”可以访问或不可以访问的应用程序。这不是我们的主题。在我的问题中,我有兴趣从个人资料中查询可用的意图。因此,如果设备所有者或管理员阻止应用程序,用户将无法在查询结果中获取它们。
  • 对于 IntentForwarder,我在源代码中找到了它。如果您调试 QueryIntentActivities,如我的问题所述,您将获得的结果之一是“切换到个人”。如果您调试此结果,您将看到 Intent 的详细信息,其中可以找到 IntentForwarder 作为此 Intent 的目的地。
猜你喜欢
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多