在android10及以上查询手机是否有安装其他app
> 当我们想要用第三方app处理某个特定的uri时,我们会这样做
- 1.先判断是否有安装此app
```java
private boolean isAppInstalled(Context c,String appPackageName) {
try {
PackageManager pm = c.getPackageManager();
PackageInfo info = pm.getPackageInfo(appPackageName, 0);
} catch (Exception e) {
return false;
}
return true;
}
```
- 2.接着通过Intent打开
```java
private void processUri(Context context,String appPackageName,String uri){
Uri parse = Uri.parse(uri);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(parse);
if (isAppInstalled(context,appPackageName)){
intent.setPackage(appPackageName);
}
startActivity(intent);
}
```
> 一般特定的协议头,如alipay ,weixin 等可不调用 intent.setPackage(appPackageName); 直接打开
## 有一个问题出现了,在android10上我们如此使用时发现明明手机有安装相应的app,但是通过调用isAppInstalled()发现返回了false,解决方案如下:
```java
在清单文件的Manifest节点添加以下
<queries>
<package android:name="相应的app包名" />
//有多个的情况可往下加
<package android:name="相应的app包名2" />
<package android:name="相应的app包名3" />
</queries>
```

浙公网安备 33010602011771号