检查权限与申请权限
exp: 以 [‘ohos.permission.LOCATION’,‘ohos.permission.APPROXIMATELY_LOCATION’, ‘ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY’]; 权限为例
//方法调用:await this.checkPermissions();this.reqPermissionsFromUser(context)//检查权限授予async checkPermissionGrant(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> {let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();let grantStatus: abilityAccessCtrl.GrantStatus = abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;// 获取应用程序的accessTokenID。let tokenId: number = 0;try {let bundleInfo: bundleManager.BundleInfo =await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo;tokenId = appInfo.accessTokenId;} catch (error) {const err: BusinessError = error as BusinessError;console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`);}// 校验应用是否被授予权限。try {grantStatus = await atManager.checkAccessToken(tokenId, permission);} catch (error) {const err: BusinessError = error as BusinessError;console.error(`Failed to check access token. Code is ${err.code}, message is ${err.message}`);}return grantStatus;} //检查两个定位权限async checkPermissions(): Promise<void> {let grantStatus1: boolean = await this.checkPermissionGrant('ohos.permission.LOCATION') ===abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; // 获取精确定位权限状态。let grantStatus2: boolean = await this.checkPermissionGrant('ohos.permission.APPROXIMATELY_LOCATION') ===abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; // 获取模糊定位权限状态。let grantStatus3: boolean = await this.checkPermissionGrant('ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY') ===abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; // 获取模糊定位权限状态。if(grantStatus3){console.log('Download 读写已经被授权')}else{console.log('Download 读写还未被授权')}// 精确定位权限只能跟模糊定位权限一起申请,或者已经有模糊定位权限才能申请精确定位权限。if (grantStatus2 && !grantStatus1) {// 申请精确定位权限。console.log('--------------------->>>> grantStatus2 && !grantStatus1')} else if (!grantStatus1 && !grantStatus2) {// 申请模糊定位权限与精确定位权限或单独申请模糊定位权限。console.log('----------------------->>>.. !grantStatus1 && !grantStatus2')} else {// 已经授权,可以继续访问目标操作。console.log('定位权限已经被授予!')}}// 使用UIExtensionAbility:将common.UIAbilityContext 替换为common.UIExtensionContextreqPermissionsFromUser( context: common.UIAbilityContext): void {const permissions: Array<Permissions> = ['ohos.permission.LOCATION','ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY'];let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();// requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗。atManager.requestPermissionsFromUser(context, permissions).then((data) => {let grantStatus: Array<number> = data.authResults;let length: number = grantStatus.length;for (let i = 0; i < length; i++) {if (grantStatus[i] === 0) {// 用户授权,可以继续访问目标操作。console.log('有一项授权了')} else {// 当用户拒绝授权时,系统应提示用户必须授予相应权限才能使用当前页面的功能,并指导用户前往系统设置开启所需权限。console.log('有一项拒绝了授权')return;}}// 授权成功}).catch((err: BusinessError) => {console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);})}