react-native 组件Linking 或 expo-linking 框架在android11+ 版本上使用 canOpenUrl(schemeName) 无法通过 Scheme Name 准确查到移动设备上是否安装某个app。
Linking 引入:
1,import * as Linking from 'expo-linking';
或
2,import { Linking } from 'react-native';
通过上述方式无法在安卓11+版本的设备上准确查找是否安装了某个App。
解决方案:
使用react-native-share 插件里的share接口来通过 packageName 来检查是否安装了某个 App。
import Share from 'react-native-share';
Share.isPackageInstalled(packageName)
.then(({ isInstalled }) => {
// 处理逻辑
}).catch(() => Promise.resolve(false))
这里 packageName 就是目标app的包名。
需要在当前项目工程 android 目录下 AndroidManifest.xml 里
添加 queries 白名单:
<manifest>
<queries>
<package android:name="com.weixin.android" />
</queries>
</manifest>
这样就可以解决问题。