1/* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import { promptAction } from '@kit.ArkUI'; 17// [Start check_permission_func] 18import { abilityAccessCtrl, bundleManager, Permissions } from '@kit.AbilityKit'; 19import { BusinessError } from '@kit.BasicServicesKit'; 20 21async function checkPermissionGrant(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> { 22 let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 23 let grantStatus: abilityAccessCtrl.GrantStatus = abilityAccessCtrl.GrantStatus.PERMISSION_DENIED; 24 // 获取应用程序的accessTokenID 25 let tokenId: number = 0; 26 try { 27 let bundleInfo: bundleManager.BundleInfo = 28 await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION); 29 let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo; 30 tokenId = appInfo.accessTokenId; 31 } catch (error) { 32 const err: BusinessError = error as BusinessError; 33 console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`); 34 } 35 // 校验应用是否被授予权限 36 try { 37 grantStatus = await atManager.checkAccessToken(tokenId, permission); 38 } catch (error) { 39 const err: BusinessError = error as BusinessError; 40 console.error(`Failed to check access token. Code is ${err.code}, message is ${err.message}`); 41 } 42 return grantStatus; 43} 44 45async function checkPermissions(): Promise<void> { 46 let grantStatus1: boolean = await checkPermissionGrant('ohos.permission.LOCATION') === 47 abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; // 获取精确定位权限状态 48 let grantStatus2: boolean = await checkPermissionGrant('ohos.permission.APPROXIMATELY_LOCATION') === 49 abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; // 获取模糊定位权限状态 50 // 精确定位权限只能跟模糊定位权限一起申请,或者已经有模糊定位权限才能申请精确定位权限 51 if (grantStatus2 && !grantStatus1) { 52 // 申请精确定位权限 53 // [StartExclude check_permission_func] 54 promptAction.showToast({ message: $r('app.string.location_not_apply') }); 55 // [EndExclude check_permission_func] 56 } else if (!grantStatus1 && !grantStatus2) { 57 // 申请模糊定位权限与精确定位权限或单独申请模糊定位权限 58 // [StartExclude check_permission_func] 59 promptAction.showToast({ message: $r('app.string.permission_not_apply') }); 60 // [EndExclude check_permission_func] 61 } else { 62 // 已经授权,可以继续访问目标操作 63 // [StartExclude check_permission_func] 64 promptAction.showToast({ message: $r('app.string.permission_apply') }); 65 // [EndExclude check_permission_func] 66 } 67} 68// [End check_permission_func] 69export { 70 checkPermissionGrant, checkPermissions 71}