HarmonyOS 是否有api可以判断用户是否授予某项权限

HarmonyOS  是否有api可以判断用户是否授予某项权限

HarmonyOS
2024-08-12 14:49:28
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

在使用权限前,检测权限。

首先,我们需要判断自己是否拥有权限。判断时间点为执行需要权限的对应操作前。如我们在获取媒体库文件时,需要判断是否拥有ohos.permission.READ_MEDIA权限。

我们可以调用atManager.verifyAccessTokenSync()方法检查授权状态,返回的结果为GrantStatus中两个常量:PERMISSION_GRANTED(已授权)和PERMISSION_DENIED(未授权)。verifyAccessTokenSync()方法需要传入两个参数,分别是应用的身份标识tokenId和检验权限permissionName。身份标识tokenId在系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取。

示例:

import bundleManager from '@ohos.bundle.bundleManager'; 
import abilityAccessCtrl,{Permissions} from '@ohos.abilityAccessCtrl'; 
export class RequestModel { 
  * 同步检查校验应用是否被授予权限 
  */ 
  async checkAccessTokenSync(bundleName:Permissions):Promise<boolean>{ 
    let atManager = abilityAccessCtrl.createAtManager(); 
    let tokenId = await this.getTokenId() 
    let data = atManager.verifyAccessTokenSync(tokenId,bundleName) 
    if(data === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) { 
      return true 
    } else  { 
      return false 
    } 
  } 
 
  /** 
   * 获取应用的身份标识 
   * 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取 
   */ 
  async getTokenId() { 
    let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION; 
    let data = await bundleManager.getBundleInfoForSelf(bundleFlags) 
    return data.appInfo.accessTokenId 
  } 
}
分享
微博
QQ
微信
回复
2024-08-12 19:16:42
相关问题
HarmonyOS 集合判断是否包含api差异
82浏览 • 1回复 待解决
HarmonyOS 是否退出应用的api
158浏览 • 1回复 待解决
HarmonyOS是否录屏的API
288浏览 • 1回复 待解决
onTouch事件是否可以判断滑动方向
1811浏览 • 1回复 待解决
HarmonyOS是否物理串口接口连接的api
245浏览 • 1回复 待解决
HarmonyOS是否提供WLAN口通讯的API?
2936浏览 • 1回复 待解决
是否衡量页面性能的 API
546浏览 • 1回复 待解决
是否可以自定义权限弹框文字
1554浏览 • 1回复 待解决
HarmonyOS 用户崩溃是否能共享
256浏览 • 1回复 待解决
废弃权限是否标记,有人知道吗?
1705浏览 • 1回复 待解决
如何判断APP是否是第一次请求权限
140浏览 • 1回复 待解决
HarmonyOS 如何判断音频是否在播放
256浏览 • 1回复 待解决