Android通过queryIntentActivities自定义发送功能
一、目标
自定义发送功能,使列表按指定顺序排列。
1. 实现效果

第二栏显示的为支持发送的第三方应用列表。
2. 下载地址
神马笔记最新版本:【神马笔记 版本1.2.0.apk】
二、功能设计
通过Context#startActivity()可以直接调用手机上的第三方应用。
但是无法控制第三方应用的显示顺序,比例“发送给朋友”、“发送到朋友圈”、“微博”是我比较经常使用的应用。通过直接调用startActivity()无法保证显示在前3个的位置。
因此,我们需要自定义发送的功能。
三、准备工作
1. 查询列表
PackageManager提供了3个方法用于查询Intent相应的Activity。
public abstract List<ResolveInfo> queryIntentActivities(Intent intent,
@ResolveInfoFlags int flags);
public abstract List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent,
@ResolveInfoFlags int flags, @UserIdInt int userId);
public abstract List<ResolveInfo> queryIntentActivityOptions(@Nullable ComponentName caller,
@Nullable Intent[] specifics, Intent intent, @ResolveInfoFlags int flags);
调用第一个方法可以获取到ResolveInfo列表。
2. 处理排序
排序分成2个部分。
- 指定排序顺序
- 按名称排序
通过配置文件,指定优先显示的Activity及先后顺序。不在配置文件中的Activity则按名称进行排序。
以下是神马笔记使用的配置文件,按照个人使用频率进行了排序。
{
"list":
[
{
"id": "com.tencent.mm.ui.tools.ShareImgUI",
"name": "发送给朋友"
},
{
"id": "com.tencent.mm.ui.tools.ShareToTimeLineUI",
"name": "发送到朋友圈"
},
{
"id": "com.sina.weibo.composerinde.ComposerDispatchActivity",
"name": "微博"
},
{
"id": "com.weico.international.activity.compose.SeaComposeActivity",
"name": "微博国际版"
},
{
"id": "com.tencent.mobileqq.activity.JumpActivity",
"name": "发送给好友"
},
{
"id": "com.alibaba.android.rimet.biz.BokuiActivity",
"name": "钉钉"
},
{
"id": "com.tencent.mm.ui.tools.AddFavoriteUI",
"name": "添加到微信收藏"
},
{
"id": "com.tencent.mobileqq.activity.qfileJumpActivity",
"name": "发送到我的电脑"
},
{
"id": "cooperation.qlink.QlinkShareJumpActivity",
"name": "面对面快传(免流量)"</

本文介绍如何自定义Android的发送功能,并按指定顺序排列支持发送的第三方应用列表。通过查询Intent的Activity并结合配置文件进行排序,实现常用应用优先显示。在实现过程中,涉及到了ResolveInfo、Comparator的使用,以及在RecyclerView中展示和启动指定Activity的方法。
最低0.47元/天 解锁文章
1738

被折叠的 条评论
为什么被折叠?



