当前位置: 首页 > news >正文

鸿蒙开发之用户隐私权限申请

一、简介

鸿蒙开发过程中可用于请求的权限一共有两种:normal和system_basic。以下内容摘自官网:

  • normal权限

    normal 权限允许应用访问超出默认规则外的普通系统资源。这些系统资源的开放(包括数据和功能)对用户隐私以及其他应用带来的风险很小。

    该类型的权限仅向APL等级为normal及以上的应用开放。

  • system_basic权限

    system_basic权限允许应用访问操作系统基础服务相关的资源。这部分系统基础服务属于系统提供或者预置的基础功能,比如系统设置、身份认证等。这些系统资源的开放对用户隐私以及其他应用带来的风险较大。

    该类型的权限仅向APL等级为system_basic及以上的应用开放。

  • system_core权限

    system_core权限涉及到开放操作系统核心资源的访问操作。这部分系统资源是系统最核心的底层服务,如果遭受破坏,操作系统将无法正常运行。

    鉴于该类型权限对系统的影响程度非常大,目前暂不向任何三方应用开放。

二、使用

以用户的MICROPHONE麦克风权限为例

我们在使用麦克风之前需要先查看用户权限,然后,如果没有开启需要跳转系统设置页面,引导用户开启权限。

import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
import bundleManager from '@ohos.bundle.bundleManager';
import common from '@ohos.app.ability.common';
@Entry
@Component
struct PermissionTest {build() {Column() {Text('check permission').width(200).height(200).backgroundColor(Color.Orange).onClick(() => {//检测权限状态checkPermissions()})}.backgroundColor(Color.Red).width('100%').height('100%')}
}/** 获取accessToken* */
async function checkAccessToken(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> {let atManager = abilityAccessCtrl.createAtManager()let grantStatus :abilityAccessCtrl.GrantStatus//获取accessTkenIDlet tokenId: numbertry {let bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfotokenId = appInfo.accessTokenId} catch (err) {console.log('get BundleInfo For self failed '+err.code + 'message='+err.message)}//检验是否授权try {grantStatus = await atManager.checkAccessToken(tokenId,permission)} catch (err) {console.log('checkAccessToken failed'+err.code + 'message='+err.message)}return grantStatus
}/** 检查权限状态* */
async function checkPermissions():Promise<void> {const permissions: Array<Permissions> = ['ohos.permission.MICROPHONE']let grantStatus: abilityAccessCtrl.GrantStatus = await checkAccessToken(permissions[0])if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {console.log('permission has requeired')} else {console.log('need request permission')//请求权限requestPermission()}
}/** 请求权限* */
function requestPermission() {let  context = getContext(this) as common.UIAbilityContextlet atManger = abilityAccessCtrl.createAtManager()let permissions: Array<Permissions> = ['ohos.permission.MICROPHONE']atManger.requestPermissionsFromUser(context,permissions).then((data) => {let grantStatus: Array<number> = data.authResultslet grantPermissions: Array<string> = data.permissionslet length: number = grantStatus.lengthconsole.log('user permissoned length' + JSON.stringify(grantPermissions)+length)for(let i = 0; i<length; i++) {if (grantStatus[i] === 0) {console.log('user has agreed permissoned')} else {console.log('user has disagree permissoned')openPermissionSettings()return}}}).catch((err) =>{console.log('requestPermissionFromUserfailed'+err.code + 'message='+err.message)})
}/** 跳转到权限设置页面* */
function openPermissionSettings() {let context = getContext(this) as common.UIAbilityContextlet  wantInfo = {action: 'action.settings.app.info',parameters: {settingsParamBundleName: 'com.example.myapplication'}}context.startAbility(wantInfo).then(() => {console.log('open setting page')}).catch((err) => {console.log('open setting page failed')})
}

三、注意事项

1、需要在module.json5文件中配置权限申请

{'name': 'ohos.permission.MICROPHONE','usedScene' : {"when": "inuse"}
}

2、如果需要引导跳转系统的设置页面,注意bundleName要正确,否则不跳转

http://www.lryc.cn/news/262318.html

相关文章:

  • Docker笔记:简单部署 nodejs 项目和 golang 项目
  • java内置的数据结构
  • 轻松搭建FPGA开发环境:第三课——Vivado 库编译与设置说明
  • 【PostgreSQL】从零开始:(十一)PostgreSQL-Dropdb命令删除数据库
  • UDP网络编程其他相关事项
  • Redhat LINUX 9.3 + PG 16.1 搭建主备流复制
  • kafka设置消费者组
  • Worker-Thread设计模式
  • npm 安装包遇到问题的常用脚本(RequestError: socket hang up)
  • 活动 | Mint Blockchain 将于 2024 年 1 月 10 号启动 MintPass 限时铸造活动
  • Android动画(四)——属性动画ValueAnimator的妙用
  • C语言飞机大战
  • js 原型 和 原型链
  • 如何利用SD-WAN节省运维成本和简化运维工作?
  • 在工作中使用CHAT提高效率
  • Maven 项目的三种打包方式与 pom.xml 文件中项目描述
  • 【普中】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)
  • 【Android】DeepLink
  • 微服务Redis-Session共享登录状态
  • 30道C++ 基础高频题整理(附答案背诵版)
  • 【Spark面试】Spark面试题答案
  • Axure的动态面板
  • 【STM32】STM32学习笔记-对射式红外传感器计次 旋转编码器计次(12)
  • 后端项目操作数据库-中枢组件Service调用Mapper实现增删改查-实例
  • kafka学习笔记--节点的服役与退役
  • 2023-12-16:用go语言,给定整数数组arr,求删除任一元素后, 新数组中长度为k的子数组累加和的最大值。 来自字节。
  • libxls - 编译
  • 自建私有git进行项目发布
  • 华为HCIP认证H12-821题库上
  • Web安全漏洞分析—文件包含