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

权限的申请与校验

HarmonyOS
2024-05-22 23:04:45
1793浏览
收藏 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%') 
  } 
} 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.

实现效果

适配的版本信息

  • IDE:DevEco    Studio 4.1.1.300
  • SDK:HarmoneyOS    4.0.10.15
分享
微博
QQ
微信
回复
2024-05-23 17:20:36


相关问题
ArkTS语法校验报错,如何处理
1656浏览 • 1回复 待解决
编译报错,信息不足如何处理
913浏览 • 1回复 待解决
注册监听关机事件,如何处理
1539浏览 • 1回复 待解决
HarmonyOS 访问控制授权申请如何处理
605浏览 • 1回复 待解决
蓝牙连接报错如何处理
1323浏览 • 1回复 待解决
HarmonyOS应用如何处理用户权限请求?
924浏览 • 0回复 待解决
上传文件接口报错 ,怎么处理
1485浏览 • 1回复 待解决
项目启动报错怎么处理
1061浏览 • 1回复 待解决
监听音频打断事件,如何处理
1840浏览 • 1回复 待解决
恭喜您,今日已阅读两篇内容,特奖励+2声望, 快来领取吧。