应用获取不同权限demo

​1.开发一个应用需要获取3种不同的权限

2.每个权限需要用户确认后才开启

3.没有经过确认的权限不能执行成功

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

1、公共类中封装两个方法,分别弹出授权框以及检查权限是否已授权

2、在不同的业务场景页面,分别触发获取授权以及在对应操作中判断是否授权

代码说明

//获取权限弹框 
async requestPermissions(permission:Permissions[],context:Context): Promise<void> { 
  let atManager:abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 
  let result:PermissionRequestResult = await atManager.requestPermissionsFromUser(context,permission); 
  let grantStatus: Array<number> = result.authResults; 
  let length: number = grantStatus.length; 
  for (let i = 0; i < length; i++) { 
    if (grantStatus[i] != 0) { 
      //授权失败 
          return ; 
        } 
  } 
      // 授权成功 
  return; 
} 
//检查权限是否存在 
async onRemoteMessageRequest(permissionName: Permissions):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, permissionName) 
    if(res == -1){ 
      flag = false; 
    }else{ 
      flag = true; 
    } 
  } catch (err) { 
    console.log(`catch err->${JSON.stringify(err)}`); 
  } 
  return flag; 
}

例如获取位置信息,点击按钮时再弹框获取权限,实际获取位置前再判断一次是否已授权,防止用户授权后又撤销授权。

Button('获取位置信息') 
  .onClick(async ()=>{ 
    //先弹框获取授权 
    await this.reqPermissionInstance.requestPermissions(this.permission,getContext(this)); 
 
    //调用前再判断是否已授权 
    this.reqPermissionInstance.onRemoteMessageRequest("ohos.permission.LOCATION").then((data) =>{ 
      if (data) { 
        //有权限,获取位置信息 
        this.getLocation(); 
      }else { 
        AlertDialog.show({ message: "位置权限未开启" }) 
      } 
    }) 
  }) 
  .margin({top:'16vp'})

环境信息

IDE:DevEco Studio 4.1.1.300

SDK:HarmoneyOS 4.0.0

分享
微博
QQ
微信
回复
2024-05-23 17:21:30
相关问题
关于获取应用列表权限问题?
2099浏览 • 1回复 待解决
Data Guard Kit权限获取
657浏览 • 1回复 待解决
使用文档中demo获取不到font信息
603浏览 • 1回复 待解决
获取定位权限没有弹框
545浏览 • 1回复 待解决
代码获取后台弹框权限
1935浏览 • 1回复 待解决
对于获取权限的api的问题
609浏览 • 1回复 待解决
使用华为账号DEMO需要应用上架么
438浏览 • 1回复 待解决
怎么获取是否开启推送通知栏权限
581浏览 • 1回复 待解决
js获取canvas对象两种方式有啥不同
6199浏览 • 1回复 待解决
怎么样获取后台弹出界面的权限
3571浏览 • 1回复 待解决
应用中如何获取应用的metadata信息?
349浏览 • 1回复 待解决
requestPermissionsFromUser使用Demo
497浏览 • 1回复 待解决
如何获取应用版本信息
665浏览 • 1回复 待解决