背景
没个应用都有第三方的登陆或者分享,但是有一种情况就是这个手机没有安装这个软件我们要动态的现实第三方的登陆或者分享的图标。
详解
我们都是用下面的方式判断,这里就拿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 跨年喽