HarmonyOS 鸿蒙Next 一个检测多个权限

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 一个检测多个权限

atManager.requestPermissionsFromUser可以同时申请多个权限。但检测atManager.checkAccessToken,一次只能检测一个,同时申请多个,应该怎么做呢?循环?atManager.checkAccessToken是异步的,怎么处理才最优雅呢?
4 回复

这个问题不算问题了,我想研究一下鸿蒙的BLE,非Next的文档里需要的权限是系统权限,ACL不给开;Next Beta有新权限,但是我手机不支持升级到Next Beta;这种BLE应用,又必须真机,哎,搞不下去了,暂时告别鸿蒙了

更多关于HarmonyOS 鸿蒙Next 一个检测多个权限的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


申请多个权限时,atManager.requestPermissionsFromUser会判断是否得到了用户的全部授权,只要未得到全部授权,它就会自动拉起权限弹窗。

但当用户在权限弹窗时未同意授权,则再调用atManager.requestPermissionsFromUser时,不会再拉起权限弹窗,此时可以用atManager.requestPermissionOnSetting再次要求用户授权。

官网有代码,可以试试:

const permissions: Array<Permissions> = ['ohos.permission.MICROPHONE'];

function reqPermissionsFromUser(permissions: Array<Permissions>, context: common.UIAbilityContext): void {
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
    atManager.requestPermissionsFromUser(context, permissions).then((data) => {
        let grantStatus: Array<number> = data.authResults;
        let length: number = grantStatus.length;
        for (let i = 0; i < length; i++) {
            if (grantStatus[i] === 0) {
                // 用户授权,可以继续访问目标操作
            } else {
                // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
                atManager.requestPermissionOnSetting(context, ['ohos.permission.MICROPHONE']).then((data: Array<abilityAccessCtrl.GrantStatus>) => {
                    console.info('data:' + JSON.stringify(data));
                }).catch((err: BusinessError) => {
                    console.error('data:' + JSON.stringify(err));
                });
            }
        }
        // 授权成功
    }).catch((err: BusinessError) => {
        console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
    })
}

在HarmonyOS鸿蒙Next中,检测多个权限可以通过AbilityContextverifySelfPermission方法实现。该方法用于检查应用是否拥有指定权限。如果需要检测多个权限,可以将权限字符串数组作为参数传入。例如:

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

let permissions: Array<string> = ['permission1', 'permission2', 'permission3'];
let atManager = abilityAccessCtrl.createAtManager();

try {
    let result = atManager.verifySelfPermission(permissions);
    console.log(\`Permissions grant result: \${JSON.stringify(result)}\`);
} catch (err) {
    console.error(\`Failed to verify permissions. Code: \${err.code}, message: \${err.message}\`);
}

verifySelfPermission方法返回一个对象,包含每个权限的授权状态。如果权限已被授予,对应值为abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED,否则为abilityAccessCtrl.GrantStatus.PERMISSION_DENIED

在HarmonyOS鸿蒙Next中,检测多个权限可以通过abilityAccessCtrl模块实现。使用checkAccessToken方法,传入权限列表和Access Token ID,返回每个权限的检查结果。示例代码如下:

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

let atManager = abilityAccessCtrl.createAtManager();
let permissions = ["permission1", "permission2"];
let tokenId = 0; // 获取实际的Access Token ID

atManager.checkAccessToken(tokenId, permissions).then((data) => {
    console.log("Permission check result: " + JSON.stringify(data));
}).catch((err) => {
    console.error("Failed to check permissions: " + JSON.stringify(err));
});

该方法返回一个Promise,包含每个权限的检查结果。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!