集成与调用鸿蒙系统的内置权限


前言

系统提供了一种允许应用访问系统资源(如:通讯录等)和系统能力(如:访问摄像头、麦克风等)的通用权限访问方式,来保护系统数据(包括用户个人数据)或功能,避免它们被不当或恶意使用。


一、如何申请应用权限

在module.json5中声明应用需要请求的权限即可,但也有需要注意的地方。

  1. 注意点:
    (1)权限级别 normal–所有应用都能用,system_basic–要签名证书 system_core–不开放
    (2)授权方式 授权方式为 user_grant(用户授权)会弹窗,而 system_grant(系统授权) 自动授权。
  2. 申请 user_grant 用户授权
    (1)先在module.json5中声明应用需要请求的权限,且要设置需要使用的场景+使用原因
    (2)检查当前是否已经授权
    (3)动态向用户申请授权:调用 requestPermissionsFromUser() 方法拉起弹窗请求用户授权,
    (4)处理授权结果:如果用户授权,则可以继续访问目标操作;如果用户拒绝授权,则需要提示用户必须授权才能访问当前页面的功能,并引导用户到系统应用“设置”中打开相应的权限。

二、录音权限

1.封装权限工具

import { abilityAccessCtrl, Permissions } from '@kit.AbilityKit';

class Permission {
  // 请求用户授权
  async requestPermissions(permissions: Permissions[]) {
    const atManager = abilityAccessCtrl.createAtManager()
    const ctx = AppStorage.get<Context>('context')
    if (ctx) {
      const result = await atManager.requestPermissionsFromUser(ctx, permissions)
      return result.authResults.every(result => result === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
    }
    return false
  }

  // 打开权限设置 beta3
  async openPermissionSetting(permissions: Permissions[]) {
    const atManager = abilityAccessCtrl.createAtManager()
    const ctx = AppStorage.get<Context>('context')
    if (ctx) {
      const authResults = await atManager.requestPermissionOnSetting(ctx, permissions)
      return authResults.every(result => result === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
    }
    return false
  }
}

export const permission = new Permission()

2. 在录音页面实现请求权限,无权限不可进入

// 1. 打开授权对话框
    // 2.1 授权,啥也不用干
    // 2.2 禁用,弹出一个对话框,提示用户授权,离开(返回上一个页面)去授权(去应用设置页面)
    try {
      const flag = await permission.requestPermissions(['ohos.permission.MICROPHONE'])
      if (!flag) {
        const dialogResult = await promptAction.showDialog({
          title: '温馨提示',
          message: '未授权使用麦克风将无法使用该面试录音功能,是否前往设置进行授权?',
          buttons: [
            { text: '离开', color: $r('app.color.common_gray_01') },
            { text: '去授权', color: $r('app.color.black') }
          ],
        })
        if (dialogResult.index === 0) {
          router.back()
        } else if (dialogResult.index === 1) {
          const want: Want = {
            bundleName: 'com.huawei.hmos.settings',
            abilityName: 'com.huawei.hmos.settings.MainAbility',
            uri: 'application_info_entry',
            parameters: {
              // 修改成你的应用包名,跳转到该应用的设置页面
              pushParams: 'xyz.zhousg.interview_tong'
            }
          }
          const uiContext = getContext(this) as common.UIAbilityContext
          uiContext.startAbility(want)
        }
      }
    } catch (e) {
      router.back()
    }
  }

总结

本文主要介绍了如何请求权限,重点介绍了录音权限及权限工具类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值