在实际开发中,如何判断设备上是否已安装了目标应用?
canOpenLink:根据给定的链接判断目标应用是否可访问,链接中的scheme需要在module.json配置文件标签里的querySchemes字段下配置。
以判断华为地图是否安装为例:(需要知道目标应用的querySchemes、应用链接url)
- "querySchemes": [
- // 华为地图
- 'maps'
- ]
- import { bundleManager } from '@kit.AbilityKit';
-
- @Entry
- @Component
- struct Index {
- @State result:boolean = false;
-
- build() {
- Column({ space: 16 }) {
- Button('目标应用安装测试').onClick(() => {
- this.isMapInstalled();
- });
-
- Text(this.result ? '已安装' : '未安装');
- }
- .width('100%')
- .height('100%')
- .justifyContent(FlexAlign.Center)
- }
-
- isMapInstalled() {
- try {
- this.result = bundleManager.canOpenLink('maps://navigation');
- } catch (err) {
- let message = (err as BusinessError).message;
- console.error(`canOpenLink failed: ${message}`);
- }
- console.info(`canOpenLink result: ${this.result}`);
- }
- }
Q:能否根据bundleName (包名)判断应用是否安装?
A:当前无法直接通过bundleName (包名)判断应用是否安装,可以尝试使用startAbility拉起应用,错误码是16000001时,指定的ability不存在。
Q:canOpenLink判断App Linking方式目标应用是否安装,卸载目标应用后还是返回true,是什么原因?
A:canOpenLink接口不支持判断以App Linking方式跳转的目标应用是否可访问。使用App Linking应用链接进行跳转时,系统会根据接口传入的uri信息(HTTPS链接)将用户引导至目标应用中的特定内容,无论应用是否已安装,用户都可以访问到链接对应的内容,所以不能作为判断应用是否安装的条件。