Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不同配置文件的查询意图活动:Android for Work_Android_Android Intent_Android Package Managers_Android For Work - Fatal编程技术网

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

不同配置文件的查询意图活动:Android for Work,android,android-intent,android-package-managers,android-for-work,Android,Android Intent,Android Package Managers,Android For Work,由于某些技术原因,我无法使用Android File Picker将文件及其内容获取到我的应用程序中。这就是为什么我提出了一个在我自己的UI上查询意图和处理结果的解决方案 下面是我如何获得具有Intent.ACTION\u get\u CONTENT /* Create a new Intent to Read a File */ Intent documentIntent = new Intent(Intent.ACTION_GET_CONTENT); documentIntent.setTy

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

下面是我如何获得具有
Intent.ACTION\u get\u 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);
/*创建读取文件的新意图*/
意向文件意向=新意向(意向.行动\u获取\u内容);
documentIntent.setType((action==action\u SELECT\u FILE)“*/*”:“image/*”;
/*查询应用程序以查看哪些可用*/
List appList=getActivity().getPackageManager().QueryInputActivities(documentIntent,PackageManager.MATCH_DEFAULT_仅限);
这很好,列出了可以处理我的请求的应用程序

但是我正在使用Android for Work,当我执行上面的代码时,我只会得到Work Profile所需的应用程序列表

但是上面代码返回的结果之一是“切换到个人”,其中列出了安装在Android File Picker中的个人帐户中的应用程序


所以问题是,我怎样才能得到同样的行为?如何从个人档案中查询意向活动?

我不太清楚,但在那篇文章中提到过

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

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

但是,如中所述,如果您的应用程序是,那么您可以实现并允许意图交叉配置文件


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

如果我错了,请纠正我,但我猜您尝试的是使用个人档案中安装的应用程序[出于此目的的任何应用程序],然后从工作档案中运行的应用程序启动它?是这样吗?@riyaz ali有点像。我正在尝试获取可以在个人档案中处理get_内容操作的应用程序列表。因此,我可以启动它(例如文件浏览器应用程序),并将此应用程序中的数据输入到我的工作配置文件下的应用程序中。感谢您的评论,但问题并不是关于设备策略控制器应用程序或文件提供方(内容URI vs文件路径)。而且可以在工作和个人档案之间发送数据。通常,谷歌使用IntentForwarder将意图从工作转发到个人档案。但不幸的是,这些方法有“隐藏”注释,因此我们无法访问它们,我并不想创建一个解决方案来公开这些方法。我想这就是文档中所说的“系统防止意图交叉配置文件”的意思。我相信正如您所说的,有一个桥接器,但要访问它,您需要实现
DevicePolicyManager
。注:只是猜测,也许你可以在这里提供更多细节。
谷歌使用IntentForwarder将意图从工作转发到个人资料
。你能举出一些源代码吗?DevicePolicyManager是为设备所有者或管理者提供的,它是为MDM提供商提供的,而不是在工作模式下工作的应用程序。使用设备策略管理器,您可以筛选组织中您的“用户”是否可以访问的应用。这不是我们的主题。在我的问题中,我感兴趣的是从个人资料中查询可用的意图。因此,如果设备所有者或管理员阻止应用程序,用户将无法在查询结果中获取它们。对于IntentForwarder,我在源代码中找到了它。如我的问题所述,如果您调试QueryInputActivities,您将得到的结果之一是“切换到Personal”。如果调试此结果,您将看到意图的详细信息,其中可以找到IntentForwarder作为此意图的目标。