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

检查权限与申请权限

exp: 以 [‘ohos.permission.LOCATION’,‘ohos.permission.APPROXIMATELY_LOCATION’, ‘ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY’]; 权限为例

//方法调用:await this.checkPermissions();this.reqPermissionsFromUser(context)//检查权限授予async checkPermissionGrant(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> {let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();let grantStatus: abilityAccessCtrl.GrantStatus = abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;// 获取应用程序的accessTokenID。let tokenId: number = 0;try {let bundleInfo: bundleManager.BundleInfo =await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo;tokenId = appInfo.accessTokenId;} catch (error) {const err: BusinessError = error as BusinessError;console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`);}// 校验应用是否被授予权限。try {grantStatus = await atManager.checkAccessToken(tokenId, permission);} catch (error) {const err: BusinessError = error as BusinessError;console.error(`Failed to check access token. Code is ${err.code}, message is ${err.message}`);}return grantStatus;} //检查两个定位权限async checkPermissions(): Promise<void> {let grantStatus1: boolean = await this.checkPermissionGrant('ohos.permission.LOCATION') ===abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; // 获取精确定位权限状态。let grantStatus2: boolean = await this.checkPermissionGrant('ohos.permission.APPROXIMATELY_LOCATION') ===abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; // 获取模糊定位权限状态。let grantStatus3: boolean = await this.checkPermissionGrant('ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY') ===abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; // 获取模糊定位权限状态。if(grantStatus3){console.log('Download 读写已经被授权')}else{console.log('Download 读写还未被授权')}// 精确定位权限只能跟模糊定位权限一起申请,或者已经有模糊定位权限才能申请精确定位权限。if (grantStatus2 && !grantStatus1) {// 申请精确定位权限。console.log('--------------------->>>> grantStatus2 && !grantStatus1')} else if (!grantStatus1 && !grantStatus2) {// 申请模糊定位权限与精确定位权限或单独申请模糊定位权限。console.log('----------------------->>>.. !grantStatus1 && !grantStatus2')} else {// 已经授权,可以继续访问目标操作。console.log('定位权限已经被授予!')}}// 使用UIExtensionAbility:将common.UIAbilityContext 替换为common.UIExtensionContextreqPermissionsFromUser( context: common.UIAbilityContext): void {const permissions: Array<Permissions> = ['ohos.permission.LOCATION','ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY'];let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();// requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗。atManager.requestPermissionsFromUser(context, permissions).then((data) => {let grantStatus: Array<number> = data.authResults;let length: number = grantStatus.length;for (let i = 0; i < length; i++) {if (grantStatus[i] === 0) {// 用户授权,可以继续访问目标操作。console.log('有一项授权了')} else {// 当用户拒绝授权时,系统应提示用户必须授予相应权限才能使用当前页面的功能,并指导用户前往系统设置开启所需权限。console.log('有一项拒绝了授权')return;}}// 授权成功}).catch((err: BusinessError) => {console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);})}
http://www.xdnf.cn/news/1481941.html

相关文章:

  • 为什么LIO-SAM的残差项使用对数映射
  • 动态规划题目
  • MotionSound-简单易用的文本转语音工具
  • Linux--命名管道
  • 【大语言模型 44】创造力评估:开放域生成质量测试
  • 【C++/STL】优先级队列,仿函数和反向迭代器
  • 阿喀琉斯之踵:从神话传说到现代隐喻的致命弱点
  • 【Kubernetes】知识点总结6
  • 2025高教社国赛数学建模竞赛B题完整参考论文(含模型和代码)
  • MQTT 与 Java 框架集成:Spring Boot 实战(二)
  • 自注意力机制解析
  • 我用Claude Code 开发了一个浏览器插件
  • Storybook:多框架兼容的前端组件开发工具,高效解决组件隔离开发与文档管理问题
  • ElasticSearch 基础内容深度解析
  • 网站管理后台
  • cifar10下载太慢,解决使用第三方链接或迅雷下载
  • VSCode下载安装与汉化
  • NAND Flash块擦除与数据状态解析
  • 【视网膜分割】一种基于结构自适应模型的空洞残差网络
  • 基于大数据+python的肾脏疾病风险教育与数据可视化系统源码 基于数据挖掘的肾脏疾病风险分析与决策支持系统(调试、开题、LW、PPT)
  • 芯片ATE测试PAT(Part Average Testing)学习总结-20250916
  • 提示词工程知识积累及分析
  • C++ 并发编程指南 实现无锁队列
  • Sentinel服务治理:服务降级、熔断与线程隔离
  • 新后端漏洞(上)- Weblogic SSRF漏洞
  • 「数据获取」《中国服务业统计与服务业发展(2014)》
  • 详解flink性能优化
  • docker使用nginxWebUI配置
  • OSG工具集
  • Python错误测试与调试——文档测试