Harmonyos 应用启动权限申请和权限的再次申请

20 阅读1分钟

本文介绍,鸿蒙应用开发时, 应用启动时的权限申请和 未获得的权限的再次申请:

qdsq.jpg zcsq.jpg

直接上代码

启动时的申请

image.png

代码示例

let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager()
await atManager.requestPermissionsFromUser(this.context, ['ohos.permission.MICROPHONE','ohos.permission.MEDIA_LOCATION']).then((data) => {
  hilog.info(DOMAIN, 'testTag', 'requestPermissionsFromUser success');
}).catch((error:BusinessError)=> {
  hilog.error(DOMAIN, 'testTag', 'Failed to set colorMode. Cause: %{public}s', JSON.stringify(error));
})

再次申请

(应用启动时,用户拒绝了app的权限申请,那么就需要在使用到相应权限时,对该权限进行再次申请) 这里up封装了一个鸿蒙的ets文件

image.png

代码:

import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
/**
 * 权限检查和申请函数
 * @param permissions 需要申请的权限
 * @param context UIAbility上下文
 * @param CallBack 回调函数,返回权限申请结果
 */
export function PermissionCheckAndApplication(
  permissions: Permissions,
  context: common.UIAbilityContext,
  CallBack: (result: boolean) => void
): void {
  // 创建权限管理器实例
  const atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();

  // 请求用户授权指定权限
  atManager.requestPermissionsFromUser(context, [permissions]).then((data) => {
    // 获取授权结果状态数组
    let grantStatus: Array<number> = data.authResults;
    console.info(`data.authResults: ${data}`);

    // 判断权限是否被拒绝
    if (grantStatus[0] == abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {
      // 没有相应权限,回调返回false
      CallBack(false);

      // 引导用户到设置页面手动授权麦克风权限
      atManager.requestPermissionOnSetting(context, ['ohos.permission.MICROPHONE'])
        .then((data: Array<abilityAccessCtrl.GrantStatus>) => {
          console.info(`requestPermissionOnSetting success, result: ${data}`);
        })
        .catch((err: BusinessError) => {
          console.error(`requestPermissionOnSetting fail, code: ${err.code}, message: ${err.message}`);
        });
    } else {
      // 权限已授权,回调返回true
      CallBack(true);
    }
  }).catch((err: BusinessError) => {
    // 权限请求过程出现错误
    console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
  });
}

小伙伴们可以创建自己的工具文件夹使用

使用

image.png

代码

Button('申请权限')
  .onClick(()=> {
    const context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
    PermissionCheckAndApplication('ohos.permission.MICROPHONE',context,(result:boolean)=>{
      if(result){
        console.info('是否有权限:是')
      }else{
        console.info('是否有权限:否')
      }
    });
  })

谢谢大家观看,点个赞哦!!!!!!!!