HarmonyOS 鸿蒙Next中向用户弹窗申请权限的方法有哪些?

HarmonyOS 鸿蒙Next中向用户弹窗申请权限的方法有哪些? 请给出代码片段或者可运行的Demo

3 回复

使用abilityAccessCtrl.createAtManager().requestPermissionsFromUser()方法:

async function requestPermission(permission: Permissions, context: Context) {
  let hasPermission: boolean = false;
  await abilityAccessCtrl.createAtManager()
    .requestPermissionsFromUser(context, [permission])
    .then((data: PermissionRequestResult) => {
      let grantStatus: number[] = data.authResults;
      if (grantStatus[0] === 0) {
        hasPermission = true;
        Logger.info('Succeeded in getting requestPermission.');
      } else {
        hasPermission = false;
        Logger.error('Failed to get requestPermission, user rejected.');
      }
    })
    .catch((err: BusinessError) => {
      Logger.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}.`);
    })

  return hasPermission;
}

更多关于HarmonyOS 鸿蒙Next中向用户弹窗申请权限的方法有哪些?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,申请权限主要通过requestPermissionsFromUser方法实现。开发者需在module.json5文件中声明所需权限,然后在Ability或ExtensionAbility中调用上述方法触发系统弹窗。用户授权结果在异步回调中返回。此外,对于部分敏感权限,需在module.json5中配置abilitiespermissions字段进行关联声明。

在HarmonyOS Next中,申请权限主要通过abilityAccessCtrl模块实现,核心步骤包括:声明权限、检查权限状态、动态申请权限。以下是关键代码示例:

1. 声明权限

module.json5配置文件中声明所需权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.CAMERA"
      }
    ]
  }
}

2. 检查与申请权限

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';

// 获取上下文
let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;

// 创建AtManager实例
let atManager = abilityAccessCtrl.createAtManager();

// 检查权限状态
async function checkPermission() {
  try {
    let grantStatus = await atManager.checkAccessToken(
      context.tokenId, 
      'ohos.permission.CAMERA'
    );
    
    if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
      // 已有权限
      console.log('已有相机权限');
    } else {
      // 申请权限
      requestPermission();
    }
  } catch (err) {
    console.error(`检查权限失败: ${err.code}, ${err.message}`);
  }
}

// 动态申请权限
async function requestPermission() {
  try {
    let permissions: Array<string> = ['ohos.permission.CAMERA'];
    let result = await atManager.requestPermissionsFromUser(
      context, 
      permissions
    );
    
    if (result.authResults[0] === 0) {
      console.log('用户授权成功');
    } else {
      console.log('用户拒绝授权');
    }
  } catch (err) {
    console.error(`申请权限失败: ${err.code}, ${err.message}`);
  }
}

// 调用检查
checkPermission();

3. 权限申请结果处理

系统会自动弹出标准权限对话框,开发者无需自定义弹窗样式。申请结果通过requestPermissionsFromUser返回的authResults数组判断:

  • 0:授权成功
  • -1:用户拒绝

注意事项:

  1. 敏感权限(如相机、位置等)必须动态申请
  2. 每次使用权限前都应检查当前授权状态
  3. 用户拒绝后,应提供适当的引导说明
  4. 权限申请必须在UIAbility上下文有效期内进行

此实现方式符合HarmonyOS Next的权限管理规范,能确保应用通过审核并正常运行。

回到顶部