问题描述
我要实现进行跳转到外部地图的功能的前进行检查应用是否存在的功能,但是无论怎么测试,所有外部安装的应用都不能检测到,不过可以获取系统的应用包是否存在,代码如下
public static boolean checkApkExist(Context context, String packageName) {
final PackageManager packageManager = context.getPackageManager();
List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
List<String> packageNames = new ArrayList<String>();
if (packageInfos != null) {
for (int i = 0; i < packageInfos.size(); i++) {
String packName = packageInfos.get(i).packageName;
packageNames.add(packName);
}
}
return packageNames.contains(packageName);
}
原因分析
通过debug发现,在获取的应用的安装包中,只有系统应用的包而没有外部安装的包,通过这里推断可能是权限的问题
问题解决
这是因为在Android 11中与外部应用交互,需要在manifest文件进行声明与那些包交互,在manifest进行添加以下内容标签,按自己需添加
<queries>
<package android:name="com.baidu.BaiduMap" />
<package android:name="com.autonavi.minimap" />
<package android:name="com.tencent.map" />
</queries>
也可以直接添加读取所有应用的权限
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
|