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

权限的申请与校验

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

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

  • 场景

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

使用的核心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语法校验报错,如何处理
931浏览 • 1回复 待解决
注册监听关机事件,如何处理
792浏览 • 1回复 待解决
编译报错,信息不足如何处理
327浏览 • 1回复 待解决
蓝牙连接报错如何处理
444浏览 • 1回复 待解决
HarmonyOS应用如何处理用户权限请求?
195浏览 • 0回复 待解决
项目启动报错怎么处理
323浏览 • 1回复 待解决
监听音频打断事件,如何处理
1001浏览 • 1回复 待解决
如何申请组合授权权限
427浏览 • 1回复 待解决
如何申请广告跟踪权限
437浏览 • 1回复 待解决
app如何申请位置权限
434浏览 • 1回复 待解决
Web组件如何申请位置权限
450浏览 • 1回复 待解决
如何申请设备上媒体读写权限
2402浏览 • 1回复 待解决
如何处理Redis内存优化?
2896浏览 • 1回复 待解决