HarmonyOS 鸿蒙Next中如何配置应用的权限?

HarmonyOS 鸿蒙Next中如何配置应用的权限?

3 回复

【背景知识】

应用在申请权限时,需要在项目的配置文件中逐个声明需要的权限,否则应用将无法获取授权,详情请参考声明权限

当应用需要访问用户的隐私信息或使用系统能力时,例如获取位置信息、访问日历、使用相机拍摄照片或录制视频等,应该向用户请求授权,详情请参考向用户申请授权

【解决方案】

系统不鼓励频繁弹窗打扰用户,如果调用requestPermissionsFromUser()接口被用户拒绝授权,将无法再次拉起弹窗,此时可使用requestPermissionOnSetting()二次拉起权限弹窗,或者引导用户跳转到系统设置的权限页进行手动开启权限,具体操作如下:

1.权限检查:

申请相关权限前应使用checkAccessToken()检查是否有该权限,若无权限则进行如下操作。 使用requestPermissionsFromUser()接口请求相应的权限时,系统会拉起权限弹窗。示例代码如下:

import { abilityAccessCtrl, Context, PermissionRequestResult, common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
let context: Context = getContext(this) as common.UIAbilityContext;
atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'], (err: BusinessError, data: PermissionRequestResult) => {
  if (err) {
    console.error(`requestPermissionsFromUser fail, err->${JSON.stringify(err)}`);
  } else {
    console.info('data:' + JSON.stringify(data));
    console.info('data permissions:' + data.permissions);
    console.info('data authResults:' + data.authResults);
    console.info('data dialogShownResults:' + data.dialogShownResults);
  }
});

2.二次向用户申请授权:

用户已经拒绝过该权限则不会再次弹起,需要引导用户开启权限有以下两种方案。

  • 方案一: 调用requestPermissionOnSetting()二次拉起权限设置弹窗,示例代码如下:
import { abilityAccessCtrl, Context, common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
let context: Context = getContext(this) as common.UIAbilityContext;
atManager.requestPermissionOnSetting(context, ['ohos.permission.CAMERA']).then((data: Array<abilityAccessCtrl.GrantStatus>) => {
  console.info('data:' + JSON.stringify(data));
}).catch((err: BusinessError) => {
  console.error('data:' + JSON.stringify(err));
});

注:不鼓励频繁调用requestPermissionOnSetting()进行权限请求。

  • 方案二: 可以引导用户点击跳转到对应应用的权限页面,让用户手动授权,示例代码如下:
import { common } from '@kit.AbilityKit';

@Entry
@ComponentV2
struct SelectCollection {
  build() {
    Column() {
      Button('跳转到对应应用的通知权限页').onClick(() => {
        let context = getContext(this) as common.UIAbilityContext;
        context.startAbility({
          bundleName: 'com.huawei.hmos.settings',
          abilityName: 'com.huawei.hmos.settings.MainAbility',
          uri: 'systemui_notification_settings', // uri为空的时候,拉起设置主页面
          parameters: {
            pushParams: {
              bundleName: 'com.example.multishopping' // 传要跳转的对应应用的包名
            }
          }
        });
      })
    }
    .width('100%')
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next中如何配置应用的权限?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中配置应用权限需通过模块配置文件进行。具体步骤:在项目的module.json5文件中,使用"requestPermissions"字段声明所需权限,包括权限名称、使用场景等属性。权限类型包括normal(普通权限)和system_basic(系统基础权限)等。配置后,系统会在应用安装或运行时根据权限级别提示用户授权。对于敏感权限,还需在应用内调用相关API动态申请用户同意。权限管理遵循最小化原则,仅申请必要权限。

在HarmonyOS Next中,应用权限配置主要通过以下步骤实现:

  1. module.json5文件中声明权限
    在应用的module.json5文件中的"abilities""requestPermissions"字段中声明所需的权限。例如:

    {
      "module": {
        "requestPermissions": [
          {
            "name": "ohos.permission.CAMERA",
            "reason": "需要访问摄像头以拍摄照片",
            "usedScene": {
              "abilities": ["MainAbility"],
              "when": "always"
            }
          }
        ]
      }
    }
    
  2. 动态申请敏感权限
    对于敏感权限(如摄像头、位置等),需要在运行时通过requestPermissionsFromUser API动态申请。示例代码:

    import abilityAccessCtrl from '[@ohos](/user/ohos).abilityAccessCtrl';
    
    let atManager = abilityAccessCtrl.createAtManager();
    atManager.requestPermissionsFromUser(this.context, ['ohos.permission.CAMERA'])
      .then((data) => {
        console.log('权限申请结果:', data.authResults);
      })
      .catch((error) => {
        console.error('权限申请失败:', error);
      });
    
  3. 权限使用规范

    • 仅申请应用功能必需的权限,并在reason字段中清晰说明使用目的。
    • 遵循最小权限原则,避免过度申请。

通过以上配置,应用可以安全、合规地使用系统权限。

回到顶部