• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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}