获取可以处理SEND意图并在视图中显示(而不是弹出对话框)的应用程序列表

15

我想获取能够处理SEND意图的手机上安装的所有应用程序列表。目前,我使用Intent.createChooser来处理此情况,但这不是我想要实现的,因为我想能够访问应用程序列表以在我的活动中显示它们的视图,类似于Android股票图库应用程序所显示的方式,而不是在旋转对话框中。

屏幕截图可以在此处找到: http://i.stack.imgur.com/0dQmo.jpg

非常感谢您提供任何帮助。

2个回答

20

PackageManager上调用queryIntentActivities(),给定一个配置为使用createChooser()相同的MIME类型、Uri等的ACTION_SENDIntent。这将返回所有与选择器中显示的匹配项列表。然后您可以利用用户的选择来启动实际的活动。

这是一个示例项目,它使用此方法创建了一个类似于主屏幕的启动器。


1
@CommonsWare 有没有办法从一个应用程序中获取特定的操作(在我的情况下是ACTION_SEND),并像putExtra(“myMessage”,shareMessage)这样做,以便该共享操作中填充我的shareMessage。我可以完成处理ACTION_SEND的应用程序的获取。谢谢。 - Archie.bpgc
@Archie.bpgc:关于额外功能,请参阅ACTION_SEND的文档以了解可用和可能支持的内容。每个具有响应ACTION_SEND的活动的应用程序都可以选择是否支持任何给定的额外功能。由于应用程序没有操作,而是活动,因此我不理解您评论的第一部分。 - CommonsWare
是的,我指的是Activity,不是Application。谢谢回复 :) - Archie.bpgc
你的源代码确实帮了很大的忙。但它并不像Android的活动选择对话框那样完全可用。 - user9599745
实际上,我认为你的代码有些问题。你创建了一个意图(intent),然后使用包管理器查询该意图的活动(activities)。当你获取到组件名称时,你创建了一个全新的意图并尝试启动它。而我所做的是使用新获取到的组件名称修改原始意图,然后启动它。现在一切似乎都正常工作了。谢谢! - user9599745
显示剩余2条评论

9
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);
}

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