123下一页
返回列表 发新帖

Android应用检测及跳转

[复制链接]

46

主题

2007

帖子

6705

积分

硕士生

小北IT

Rank: 6Rank: 6

金币
1983
好评
43
贡献
1

2019-5.1节快乐MT论坛最佳新人MT论坛帅哥考神MT论坛活跃会员

QQ
发表于 2021-1-16 14:57:28 | 显示全部楼层 | 阅读模式
本帖最后由 李易壮 于 2021-1-16 15:00 编辑

第二代检测是否已安装某应用并按需跳转的代码。

昨天维护ChaTi时发现没能正常跳转到Creator(加载云链文章),需要适配安卓11,OK,那我进行系统版本判断,按分支执行不同的代码块。

为方便理解,贴下正常效果的示例图:



今天有小伙伴问我,“现在跟纯纯可以同时存在了?”

我直截了当甩了俩表情包过去:



嗯,在安卓11的设备上,ChaTi没自我结束运行。因为检测不到是否已安装纯纯软件了。

具体的事件经过可以翻论坛的帖子,我就不科普了。但原则不会改变:我站在MT这边,和许晓锋同志硬刚下去。

以此为例,我教大家如何进行Android应用检测及跳转。




首先大家要清楚目标应用的包名和主界面的Activity类名,使用MT的Activity记录可以轻松查到。

然后贴一下封装好的工具类代码:

  1. public static void checkDrakeetSoft(Context context, Context activityContext) {
  2.         Handler handler = new Handler(Looper.getMainLooper());
  3.         handler.postDelayed(() -> {
  4.             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
  5.                 ComponentName writerName = new ComponentName(
  6.                         "com.drakeet.purewriter",  //这个是另外一个应用程序的包名
  7.                         "com.drakeet.purewriter.WriterActivity");   //这个参数是要启动的Activity的全路径名
  8.                 try {
  9.                     Intent intent = new Intent();
  10.                     intent.setComponent(writerName);
  11.                     activityContext.startActivity(intent);
  12.                     textToast(context, "检测到已安装纯纯作品");
  13.                 } catch (Exception e) {
  14.                     ComponentName mosaicName = new ComponentName(
  15.                             "me.drakeet.puremosaic",  //这个是另外一个应用程序的包名
  16.                             "me.drakeet.puremosaic.MainActivity");   //这个参数是要启动的Activity的全路径名
  17.                     try {
  18.                         Intent intent = new Intent();
  19.                         intent.setComponent(mosaicName);
  20.                         activityContext.startActivity(intent);
  21.                         textToast(context, "检测到已安装纯纯作品");
  22.                     } catch (Exception ignore) {
  23.                     }
  24.                 }
  25.             } else {
  26.                 int uidA, uidB;
  27.                 try {
  28.                     ApplicationInfo applicationInfo = activityContext.getPackageManager().getApplicationInfo("com.drakeet.purewriter", 0);
  29.                     uidA = applicationInfo.uid;
  30.                 } catch (Exception e) {
  31.                     uidA = -1;
  32.                 }
  33.                 try {
  34.                     ApplicationInfo applicationInfo = activityContext.getPackageManager().getApplicationInfo("me.drakeet.puremosaic", 0);
  35.                     uidB = applicationInfo.uid;
  36.                 } catch (Exception e) {
  37.                     uidB = -1;
  38.                 }

  39.                 if (uidA > 0 || uidB > 0) {
  40.                     try {
  41.                         String joinGroup = "mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3Dkgxrb4Lc-zfP0vVf8Rg0CKtcQNKTq6SA";
  42.                         activityContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(joinGroup)));
  43.                         tipToast(context, "检测到已安装纯纯作品");
  44.                     } catch (Exception e) {
  45.                         tipToast(context, "请检查是否安装QQ");
  46.                         ComponentName writerName = new ComponentName(
  47.                                 "com.drakeet.purewriter",  //这个是另外一个应用程序的包名
  48.                                 "com.drakeet.purewriter.WriterActivity");   //这个参数是要启动的Activity的全路径名
  49.                         try {
  50.                             Intent intent = new Intent();
  51.                             intent.setComponent(writerName);
  52.                             activityContext.startActivity(intent);
  53.                         } catch (Exception f) {
  54.                             ComponentName mosaicName = new ComponentName(
  55.                                     "me.drakeet.puremosaic",  //这个是另外一个应用程序的包名
  56.                                     "me.drakeet.puremosaic.MainActivity");   //这个参数是要启动的Activity的全路径名
  57.                             try {
  58.                                 Intent intent = new Intent();
  59.                                 intent.setComponent(mosaicName);
  60.                                 activityContext.startActivity(intent);
  61.                             } catch (Exception ignore) {
  62.                             }
  63.                         }
  64.                     }
  65.                 }
  66.             }
  67.         }, 10);
  68.     }
复制代码

该工具类叫做DiyUtils.java,在ChaTi主界面获得焦点后执行,即每次切回到ChaTi的主界面时执行。

代码块:

  1. @Override
  2.     protected void onResume() {
  3.         super.onResume();
  4.         DiyUtils.checkDrakeetSoft(getApplicationContext(), MainActivity.this);
  5.     }
复制代码


上述工具类中用到的tipToast和textToast是我封装的两个Toast,后者为纯文本的(因为安卓11禁止在后台显示自定义样式的Toast)。

代码水平不是很高的话,可以先把上边的tipToast全部替换成textToast,然后在工具类中添加以下方法:

  1. public static void showToastText(Context context, String message) {

  2.         Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
  3.         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
  4.             toast.setGravity(Gravity.CENTER, 0, 0);
  5.         }
  6.         toast.setDuration(Toast.LENGTH_SHORT);
  7.         toast.show();
  8.     }

  9.     public static void textToast(Context context, String tipStr) {
  10.         showToastText(context, tipStr);
  11.     }
复制代码


然后是实战演示了。


实战-检测纯纯写作

最近还有好多想开源给大家的代码,好忙啊。

溜了溜了。
已有1人评分好评 金币 理由
小熊ctrl + 1 + 1

查看全部评分 总评分:好评 +1  金币 +1 

小北IT创始人
回复

使用道具 举报

51

主题

1618

帖子

4385

积分

大学生

Rank: 5Rank: 5

金币
1349
好评
27
贡献
0

考神

发表于 2021-1-16 15:02:39 来自手机  | 显示全部楼层
前排
回复

使用道具 举报

46

主题

2007

帖子

6705

积分

硕士生

小北IT

Rank: 6Rank: 6

金币
1983
好评
43
贡献
1

2019-5.1节快乐MT论坛最佳新人MT论坛帅哥考神MT论坛活跃会员

QQ
发表于 2021-1-16 15:02:49 | 显示全部楼层
沙发是自己的
小北IT创始人
回复

使用道具 举报

1

主题

1128

帖子

3956

积分

大学生

Rank: 5Rank: 5

金币
704
好评
2
贡献
1

考神MT论坛帅哥

QQ
发表于 2021-1-16 15:02:55 来自手机  | 显示全部楼层
看看学习一下
回复

使用道具 举报

46

主题

2007

帖子

6705

积分

硕士生

小北IT

Rank: 6Rank: 6

金币
1983
好评
43
贡献
1

2019-5.1节快乐MT论坛最佳新人MT论坛帅哥考神MT论坛活跃会员

QQ
发表于 2021-1-16 15:03:19 | 显示全部楼层

沙发被你抢了
小北IT创始人
回复

使用道具 举报

51

主题

1618

帖子

4385

积分

大学生

Rank: 5Rank: 5

金币
1349
好评
27
贡献
0

考神

发表于 2021-1-16 15:05:16 来自手机  | 显示全部楼层
李易壮 发表于 2021-1-16 15:03
沙发被你抢了

嘿嘿嘿嘿
回复

使用道具 举报

2

主题

108

帖子

660

积分

初中生

Rank: 3Rank: 3

金币
134
好评
0
贡献
0
发表于 2021-1-16 15:09:34 来自手机  | 显示全部楼层
学习学习
回复

使用道具 举报

76

主题

3093

帖子

1万

积分

版主

论坛萌新

Rank: 7Rank: 7Rank: 7

金币
3700
好评
177
贡献
1

考神MT论坛帅哥MT论坛活跃会员MT论坛最佳新人MT论坛侠客

QQ
发表于 2021-1-16 15:20:44 来自手机  | 显示全部楼层
前来支持
回复

使用道具 举报

1

主题

796

帖子

2451

积分

大学生

Rank: 5Rank: 5

金币
171
好评
1
贡献
0
发表于 2021-1-16 15:40:46 来自手机  | 显示全部楼层
感谢分享
回复

使用道具 举报

0

主题

274

帖子

1777

积分

高中生

Rank: 4

金币
204
好评
0
贡献
0
发表于 2021-1-16 15:59:51 来自手机  | 显示全部楼层
啊来PK哦呜PS
回复

使用道具 举报

41

主题

1113

帖子

4299

积分

大学生

Rank: 5Rank: 5

金币
3209
好评
5
贡献
0
发表于 2021-1-16 16:32:37 来自手机  | 显示全部楼层
回复看看
回复

使用道具 举报

306

主题

3277

帖子

1万

积分

博士生

大佬

Rank: 7Rank: 7Rank: 7

金币
571
好评
49
贡献
0

考神MT论坛最佳新人MT论坛帅哥MT论坛活跃会员MT论坛灌水老大

发表于 2021-1-16 16:34:54 来自手机  | 显示全部楼层
。看看看
回复

使用道具 举报

43

主题

784

帖子

2864

积分

大学生

白嫖怪

Rank: 5Rank: 5

金币
43
好评
23
贡献
0
发表于 2021-1-16 16:45:04 来自手机  | 显示全部楼层
感谢分享
回复

使用道具 举报

66

主题

1417

帖子

4248

积分

大学生

Rank: 5Rank: 5

金币
95
好评
3
贡献
1

考神

发表于 2021-1-16 18:58:21 来自手机  | 显示全部楼层
回复看看.....
回复

使用道具 举报

19

主题

616

帖子

2440

积分

大学生

小百

Rank: 5Rank: 5

金币
68
好评
66
贡献
0
QQ
发表于 2021-1-17 00:20:54 来自手机  | 显示全部楼层
慧齿
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表