Android通过queryIntentActivities自定义发送功能

本文介绍如何自定义Android的发送功能,并按指定顺序排列支持发送的第三方应用列表。通过查询Intent的Activity并结合配置文件进行排序,实现常用应用优先显示。在实现过程中,涉及到了ResolveInfo、Comparator的使用,以及在RecyclerView中展示和启动指定Activity的方法。
摘要由CSDN通过智能技术生成

一、目标

自定义发送功能,使列表按指定顺序排列。

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个部分。

  1. 指定排序顺序
  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.QlinkShareJump
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值