|
本帖最后由 李易壮 于 2021-1-16 15:00 编辑
第二代检测是否已安装某应用并按需跳转的代码。
昨天维护ChaTi时发现没能正常跳转到Creator(加载云链文章),需要适配安卓11,OK,那我进行系统版本判断,按分支执行不同的代码块。
为方便理解,贴下正常效果的示例图:

今天有小伙伴问我,“现在跟纯纯可以同时存在了?”
我直截了当甩了俩表情包过去:


嗯,在安卓11的设备上,ChaTi没自我结束运行。因为检测不到是否已安装纯纯软件了。
具体的事件经过可以翻论坛的帖子,我就不科普了。但原则不会改变:我站在MT这边,和许晓锋同志硬刚下去。
以此为例,我教大家如何进行Android应用检测及跳转。
首先大家要清楚目标应用的包名和主界面的Activity类名,使用MT的Activity记录可以轻松查到。
然后贴一下封装好的工具类代码:
- public static void checkDrakeetSoft(Context context, Context activityContext) {
- Handler handler = new Handler(Looper.getMainLooper());
- handler.postDelayed(() -> {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
- ComponentName writerName = new ComponentName(
- "com.drakeet.purewriter", //这个是另外一个应用程序的包名
- "com.drakeet.purewriter.WriterActivity"); //这个参数是要启动的Activity的全路径名
- try {
- Intent intent = new Intent();
- intent.setComponent(writerName);
- activityContext.startActivity(intent);
- textToast(context, "检测到已安装纯纯作品");
- } catch (Exception e) {
- ComponentName mosaicName = new ComponentName(
- "me.drakeet.puremosaic", //这个是另外一个应用程序的包名
- "me.drakeet.puremosaic.MainActivity"); //这个参数是要启动的Activity的全路径名
- try {
- Intent intent = new Intent();
- intent.setComponent(mosaicName);
- activityContext.startActivity(intent);
- textToast(context, "检测到已安装纯纯作品");
- } catch (Exception ignore) {
- }
- }
- } else {
- int uidA, uidB;
- try {
- ApplicationInfo applicationInfo = activityContext.getPackageManager().getApplicationInfo("com.drakeet.purewriter", 0);
- uidA = applicationInfo.uid;
- } catch (Exception e) {
- uidA = -1;
- }
- try {
- ApplicationInfo applicationInfo = activityContext.getPackageManager().getApplicationInfo("me.drakeet.puremosaic", 0);
- uidB = applicationInfo.uid;
- } catch (Exception e) {
- uidB = -1;
- }
- if (uidA > 0 || uidB > 0) {
- try {
- 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";
- activityContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(joinGroup)));
- tipToast(context, "检测到已安装纯纯作品");
- } catch (Exception e) {
- tipToast(context, "请检查是否安装QQ");
- ComponentName writerName = new ComponentName(
- "com.drakeet.purewriter", //这个是另外一个应用程序的包名
- "com.drakeet.purewriter.WriterActivity"); //这个参数是要启动的Activity的全路径名
- try {
- Intent intent = new Intent();
- intent.setComponent(writerName);
- activityContext.startActivity(intent);
- } catch (Exception f) {
- ComponentName mosaicName = new ComponentName(
- "me.drakeet.puremosaic", //这个是另外一个应用程序的包名
- "me.drakeet.puremosaic.MainActivity"); //这个参数是要启动的Activity的全路径名
- try {
- Intent intent = new Intent();
- intent.setComponent(mosaicName);
- activityContext.startActivity(intent);
- } catch (Exception ignore) {
- }
- }
- }
- }
- }
- }, 10);
- }
复制代码
该工具类叫做DiyUtils.java,在ChaTi主界面获得焦点后执行,即每次切回到ChaTi的主界面时执行。
代码块:
- @Override
- protected void onResume() {
- super.onResume();
- DiyUtils.checkDrakeetSoft(getApplicationContext(), MainActivity.this);
- }
复制代码
上述工具类中用到的tipToast和textToast是我封装的两个Toast,后者为纯文本的(因为安卓11禁止在后台显示自定义样式的Toast)。
代码水平不是很高的话,可以先把上边的tipToast全部替换成textToast,然后在工具类中添加以下方法:
- public static void showToastText(Context context, String message) {
- Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
- toast.setGravity(Gravity.CENTER, 0, 0);
- }
- toast.setDuration(Toast.LENGTH_SHORT);
- toast.show();
- }
- public static void textToast(Context context, String tipStr) {
- showToastText(context, tipStr);
- }
复制代码
然后是实战演示了。

实战-检测纯纯写作
最近还有好多想开源给大家的代码,好忙啊。
溜了溜了。
|
-
查看全部评分
总评分:好评 +1
金币 +1
|