android 11及以上如何通过包名跳转APP

下面是通过包名跳转到其他APP的代码,以微信APP包名为例:

val intent : Intent?
        intent = activity?.packageManager?.getLaunchIntentForPackage("com.tencent.mm")
        if (intent == null) {
            Log.d("Alex", "intent = $intent")
        } else {
            startActivity(intent)
        }

通过日志可知道,intent为null,当包名错误或者该APP未配置启动Activity时,就会为null,为啥呢?

经过一晚上的上网查询,找到答案了,如下:

Android 11以下,上述代码就可以跳转,但是11及以上,查询包名相关的方法都被限制了,

方法一:必须在AndroidManifest.xml文件里面配置上权限才可,如下:

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />

方法二:必须在AndroidManifest.xml文件里面配置上跳转APP的包名,如下:

<queries >
    <package android:name="com.tencent.mm"/>
</queries>

pls:

在Android12版本系统中,Google对QUERY_ALL_PACKAGES权限做了进一步限制,当应用程序在使用getAllPermissionGroups()、getPermissionGroupInfo()、getPermissionInfo()和queryPermissionsByGroup()等四个接口时,应用程序必须申请该权限,才能访问有效数据。以上四个接口分别为获取所有权限组集合、根据指定权限组名称获取权限组信息、根据指定权限获取权限信息和根据权限组查询权限。

同时,在Android12版本系统中,应用程序可以声明并创建一个自定义Activity,该Activity在启动后可让用户管理应用存储在用户设备上的数据。而应用程序使用该Activity的前提是必须同时具有MANAGE_EXTERNAL_STORAGE 权限和QUERY_ALL_PACKAGES 权限。

好了,又可以开心的玩耍了。

常见的一些APP包名:

// 微信 包名 com.tencent.mm //启动类名:com.tencent.mm.ui.LauncherUI

 //QQ 包名 com.tencent.mobileqq  //启动类名:com.tencent.mobileqq.activity.HomeActivity

//支付宝 包名:com.eg.android.AlipayGphone    //启动类名com.eg.android.AlipayGphone.FastStartActivity

//钉钉 包名:com.alibaba.android.rimet    //启动类名:com.alibaba.android.rimet.biz.home.activity.HomeActivity

//QQ空间 包名:com.qzone

//QQ手机管家 包名:com.tencent.qqpimsecure

//微博 包名:com.sina.weibo   //启动类名:com.sina.weibo.EditActivity

//天天动听 包名:com.sds.android.ttpod

//中华万年历 包名:cn.etouch.ecalendar

//百度地图 包名:com.baidu.BaiduMap

//高德地图 包名:com.autonavi.minimap   //启动类名:com.autonavi.map.activity.SplashActivity

//信息 包名:com.android.mms

//设置 包名:com.android.settings

//浏览器 包名:com.android.browser

//计算器 包名:com.android.calculator2

//时钟 包名:com.android.deskclock

//图库 包名:com.android.gallery3d

//相机 包名:com.android.hwcamera

//音乐 包名:com.android.mediacenter

//收音机 包名:com.huawei.android.FMRadio

//录音机 包名:com.android.soundrecorder

//UC浏览器 包名:com.UCMobile

//美图秀秀 包名:com.mt.mtxx.mtxx

//PPTV 包名:com.pplive.androidphone

//书旗免费小说 包名:com.shuqi.controller

//360手机助手 包名:com.qihoo.appstore

//360卫士 包名:com.qihoo360.mobilesafe

//360清理大师 包名:com.qihoo.cleandroid_cn

//百度手机助手 包名:com.baidu.appsearch

//豌豆荚 包名:com.wandoujia.phoenix2

//小米应用商店 包名:com.xiaomi.market

//华为应用商店 包名:com.huawei.appmarket

//安智应用商店 包名:com.hiapk.marketpho

//R.E.管理器 包名:com.speedsoftware.rootexplorer 

//PP手机助手 包名:com.pp.assistant

//OPPO应用商店 包名:com.oppo.market

//联想应用商店  包名:com.lenovo.leos.appstore

//应用宝 包名:com.tencent.android.qqdownloader

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android应用中执行Shell命令可以通过`Runtime.getRuntime().exec(command)`方法来实现,其中`command`是要执行的Shell命令字符串,比如`am start -n com.example.app/.MainActivity`。 要实现从一个Android应用跳转到另一个应用,可以通过调用Shell命令来执行`am start`命令。`am start`命令用于启动一个指定应用的特定Activity。 首先,需要确保设备已经root或者应用拥有相应的系统权限,才能执行Shell命令。然后,在应用中通过`Runtime.getRuntime().exec()`方法执行Shell命令。 下面是一个示例代码: ```java try { // 构建要执行的命令 String packageName = "com.example.app"; String activityName = "com.example.app.MainActivity"; String command = "am start -n " + packageName + "/" + activityName; // 执行Shell命令 Process process = Runtime.getRuntime().exec(command); // 读取命令结果 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { Log.d("Shell", line); } // 等待命令执行完成 process.waitFor(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } ``` 上述代码中,将要跳转应用包名和Activity名拼接成一个命令字符串,然后通过`Runtime.getRuntime().exec()`方法执行Shell命令。读取命令结果可以通过`InputStreamReader`和`BufferedReader`来实现,可以根据需要处理命令输出的结果。最后使用`process.waitFor()`等待命令执行完成。 需要注意的是,执行Shell命令需要小心处理,确保没有安全隐患。同时,要避免滥用Shell命令,以免影响到设备的正常运行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值