权限的申请与校验,该如何处理啊?

权限的申请与校验

HarmonyOS
2024-05-22 23:04:45
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
spitter

本文主要介绍权限的申请,以及去检验一个应用是否授权。

  • 场景

在应用申请授权时,拉起授权弹框

使用的核心API

授权申请指导

权限校验指导

核心代码解释

核心代码如下:

import abilityAccessCtrl, { PermissionRequestResult, Permissions } from '@ohos.abilityAccessCtrl'; 
import common from '@ohos.app.ability.common'; 
import { BusinessError } from '@ohos.base'; 
import rpc from '@ohos.rpc' 
  
  
const permissions: Array<Permissions> = ['ohos.permission.APPROXIMATELY_LOCATION']; 
  
const permissions1: Array<Permissions> = ['ohos.permission.ACCESS_BLUETOOTH']; 
@Entry 
@Component 
struct ReqPermission { 
  @State message: string = 'Hello World' 
  
  reqPermissionsFromUser(permissions: Array<Permissions>): void { 
    let context: Context = getContext(this) as common.UIAbilityContext; 
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();//获取访问控制模块 
    // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗 
    atManager.requestPermissionsFromUser(context, permissions1).then((data: PermissionRequestResult) => { 
      let grantStatus: Array<number> = data.authResults; 
      let length: number = grantStatus.length; 
      for (let i = 0; i < length; i++) { 
        if (grantStatus[i] === 0) { 
          // 用户授权,可以继续访问目标操作 
          AlertDialog.show({message:"授权成功"}) 
        } else { 
          // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限 
          return; 
        } 
      } 
      // 授权成功 
    }).catch((err: BusinessError) => { 
      console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); 
    }); 
  } 
  
  async onRemoteMessageRequest():Promise<boolean> { 
    let flag:boolean = true; 
    let callerTokenId: number = rpc.IPCSkeleton.getCallingTokenId(); 
    console.log("RpcServer: getCallingTokenId result: " + callerTokenId); 
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 
    try { 
      let res:number = await atManager.checkAccessToken(callerTokenId, "ohos.permission.ACCESS_BLUETOOTH") 
      if(res == -1){ 
        flag = false; 
      }else{ 
        flag = true; 
      } 
    } catch (err) { 
      console.log(`catch err->${JSON.stringify(err)}`); 
    } 
    return flag; 
  } 
  
  build() { 
    Row() { 
      Column() { 
        Text('授权') 
          .textAlign(TextAlign.Center) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .width('100%') 
          .onClick(() => { 
            this.reqPermissionsFromUser(permissions) 
          }) 
        Text('检验') 
          .textAlign(TextAlign.Center) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .width('100%') 
          .onClick(() => { 
            this.onRemoteMessageRequest().then((data)=>{ 
              AlertDialog.show({ message: "==>" + data }) 
            }); 
          }) 
      } 
    } 
    .height('100%') 
  } 
} 

实现效果

适配的版本信息

  • IDE:DevEco    Studio 4.1.1.300
  • SDK:HarmoneyOS    4.0.10.15
分享
微博
QQ
微信
回复
2024-05-23 17:20:36
相关问题
ArkTS语法校验报错,如何处理
382浏览 • 1回复 待解决
注册监听关机事件,如何处理
437浏览 • 1回复 待解决
监听音频打断事件,如何处理
441浏览 • 1回复 待解决
如何处理Redis内存优化?
1662浏览 • 1回复 待解决
如何申请设备上媒体读写权限
888浏览 • 1回复 待解决
应用线程过多时如何处理
735浏览 • 1回复 待解决
如何处理HAR之间互相依赖
942浏览 • 1回复 待解决
如何处理消息被频控问题
662浏览 • 1回复 待解决
如何处理应用存在URL硬编码?
348浏览 • 1回复 待解决
ArkTS后台代理提醒,需要如何处理
374浏览 • 1回复 待解决
Stage模型中如何申请网络访问权限
845浏览 • 1回复 待解决
如何处理应用卡死(appfreeze)问题
728浏览 • 1回复 待解决
如何处理webview显示元素尺寸过小
680浏览 • 1回复 待解决
错误rowCount返回值-1如何处理
413浏览 • 1回复 待解决
关于权限申请配置文件声明
578浏览 • 1回复 待解决