获取能够处理发送意图的应用程序列表以显示在视图中(不是弹出对话框)

Posted

技术标签:

【中文标题】获取能够处理发送意图的应用程序列表以显示在视图中(不是弹出对话框)【英文标题】:Get the list of apps capable of handling the SEND intent to display in a View (not a popup dialog) 【发布时间】:2012-02-23 10:12:00 【问题描述】:

我正在尝试获取安装在能够处理 SEND 意图的手机上的所有应用的列表。我目前正在使用 Intent.createChooser 处理这种情况,但这不是我想要实现的,因为我希望能够访问应用程序列表以在我的活动中以类似的方式在视图中显示它们android stock Gallery 应用程序如何显示它们,而不是在微调器对话框中。

此处提供屏幕截图:http://i.stack.imgur.com/0dQmo.jpg

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:
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);

【讨论】:

【参考方案2】:

PackageManager 上调用queryIntentActivities(),给定一个ACTION_SEND Intent 配置为与createChooser() 一起使用(即具有MIME 类型Uri 等)。这将为您提供将出现在选择器中的所有匹配项的列表。然后,您可以利用用户的选择来启动实际的活动。

Here is a sample project 使用它来创建主屏幕风格的启动器。

【讨论】:

@CommonsWare 有没有办法从应用程序获取特定操作(在我的情况下为 ACTION_SEND)并执行类似 putExtra("myMessage", shareMessage);以便使用我的 shareMessage 填充该共享操作。我可以完成直到获得可以处理 ACTION_SEND 的应用程序。谢谢 @Archie.bpgc:关于额外内容,请参阅ACTION_SEND 的文档了解可用和可能支持的内容。每个具有可以响应ACTION_SEND 的活动的应用程序都可以选择是否支持任何给定的额外内容。而且由于应用程序没有动作——活动有——我不明白你评论的第一部分。 是的,我的意思是那里的活动,而不是应用程序。感谢您的回复:) 您的源代码实际上帮了很多忙。但它不像 android 的活动选择器对话框那样工作。 其实我认为你的代码做错了什么。您创建了一个意图。然后使用包管理器查询活动的意图。然后当你得到组件名称时;您创建了一个全新的意图并尝试启动它。我所做的是用新获得的组件名称修改原始意图。然后启动它。现在一切似乎都在正常工作。谢谢!!

以上是关于获取能够处理发送意图的应用程序列表以显示在视图中(不是弹出对话框)的主要内容,如果未能解决你的问题,请参考以下文章

使用数组列表、列表视图和意图的问题

具有列表的发送意图具有列表

从列表视图的自定义适配器内的意图服务接收结果

在 Android 中高效处理动态列表视图项

PagerSlidingTabStrip- 使用列表片段的自定义视图显示突然的行为

如何在基于 SwiftUI 的 iOS 应用中呈现连续视图?