Android 判断是否安装此应用(解决Android12和Android11获取不到已安装的所有应用列表)

这篇博客讲述了在Android 11及12中,由于权限收紧导致无法动态显示第三方登录或分享图标的問題。解决办法是在清单文件中添加queries标签,并更新Gradle插件版本或添加uses-permission。同时,文中提到了升级Gradle插件版本到4.0.1或添加'android.permission.QUERY_ALL_PACKAGES'权限来解决AAPT错误。
摘要由CSDN通过智能技术生成

背景
没个应用都有第三方的登陆或者分享,但是有一种情况就是这个手机没有安装这个软件我们要动态的现实第三方的登陆或者分享的图标。

详解
我们都是用下面的方式判断,这里就拿QQ和微信举例但是⚠️在安卓11和安卓12的时候这样就失效了(标准为 targetSdk 30在30以下都没有问题)因为权限收紧我们需要在清单文件里面添加queries

整体代码
清单文件添加(安卓11或者12可以添加11以下可以加可不加)这个方式就是因为Android10以上权限收紧需要在清单文件里面添加白名单吧!
⚠️注意结构
请添加图片描述

    <!--    适配安卓12&11获取当前已安装的所有应用列表-->
    <queries>
        <intent>
            <action android:name="android.intent.action.MAIN" />
        </intent>
    </queries>
  

代码获取已安装的所有应用列表判断逻辑

 public static boolean isInstallQQWEICHAT(Context context) {
        boolean qq = isAppInstalled(context, "com.tencent.mobileqq");
        boolean wechat = isAppInstalled(context, "com.tencent.mm");
        return qq || wechat;
    }
    
    public static boolean isAppInstalled( Context ctx, String PackageName ) {
        try {
            PackageManager packageManager = app.contex.getPackageManager();
            PackageInfo info = packageManager.getPackageInfo(PackageName, 0);
          if (info!=null){
                return true;
            }
        } catch (Exception e) {
           /// loge(e);
        }
        return false;
    }

这就算👌了但是还是会有一些老的项目遇到一些问题
AAPT: error: unexpected element <queries> found in <manifest>.
什么意思?
其实就是gradle插件版本太低了比如你是3.3.0他不认识这个<queries>
怎么办?
升级一下例如: classpath “com.android.tools.build:gradle:4.0.1”
或者

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

完结 放假2021.12.30 跨年喽

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王鑫林呀!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值