我想获取能够处理SEND意图的手机上安装的所有应用程序列表。目前,我使用Intent.createChooser来处理此情况,但这不是我想要实现的,因为我想能够访问应用程序列表以在我的活动中显示它们的视图,类似于Android股票图库应用程序所显示的方式,而不是在旋转对话框中。
屏幕截图可以在此处找到: http://i.stack.imgur.com/0dQmo.jpg
非常感谢您提供任何帮助。
我想获取能够处理SEND意图的手机上安装的所有应用程序列表。目前,我使用Intent.createChooser来处理此情况,但这不是我想要实现的,因为我想能够访问应用程序列表以在我的活动中显示它们的视图,类似于Android股票图库应用程序所显示的方式,而不是在旋转对话框中。
屏幕截图可以在此处找到: http://i.stack.imgur.com/0dQmo.jpg
非常感谢您提供任何帮助。
在PackageManager
上调用queryIntentActivities()
,给定一个配置为使用createChooser()
相同的MIME
类型、Uri
等的ACTION_SEND
Intent
。这将返回所有与选择器中显示的匹配项列表。然后您可以利用用户的选择来启动实际的活动。
这是一个示例项目,它使用此方法创建了一个类似于主屏幕的启动器。
List<String> packages = new ArrayList<>();
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "test");
sendIntent.setType("text/plain");
List<ResolveInfo> resolveInfoList = getPackageManager()
.queryIntentActivities(sendIntent, 0);
for (ResolveInfo resolveInfo : resolveInfoList) {
packages.add(resolveInfo.activityInfo.packageName);
}
ACTION_SEND
的文档以了解可用和可能支持的内容。每个具有响应ACTION_SEND
的活动的应用程序都可以选择是否支持任何给定的额外功能。由于应用程序没有操作,而是活动,因此我不理解您评论的第一部分。 - CommonsWare