检查用户是否已向您的应用授予特定权限,可以使用checkAccessToken()函数,此方法会返回PERMISSION_GRANTED或PERMISSION_DENIED。
若需查询应用的网络访问策略(是否允许使用蜂窝、Wi-Fi网络上网),可以使用policy.getNetAccessPolicy接口。
参考代码如下:
import { abilityAccessCtrl, bundleManager, Permissions } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct demo {
@State message: string = '点击权限检查';
@State wifiStatus: boolean = false;
@State internetStatus: boolean = false;
build() {
RelativeContainer() {
Text(this.message)
.id('权限检查')
.fontSize($r('app.float.page_text_font_size'))
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
.onClick(() => {
this.checkPermissions();
this.message = 'wifi权限' + this.wifiStatus + ",数据联网权限:" + this.internetStatus;
})
}
.height('100%')
.width('100%')
}
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); // 获取包含应用信息的 BundleInfo,比如应用名称、应用包名、应用组件
let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo;
tokenId = appInfo.accessTokenId; // 获取`tokenId` ,它是 HarmonyOS 中用于应用权限管理的一个关键标识符
} 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); // `checkAccessToken` 是 `atManager` 对象上的一个方法,用于验证给定的令牌ID和权限是否有效。
} 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.GET_WIFI_INFO') ===
abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED;
let grantStatus2: boolean = await this.checkPermissionGrant('ohos.permission.INTERNET') ===
abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED;
console.info("wifi权限:" + grantStatus1);
console.info("数据联网权限:" + grantStatus2);
this.wifiStatus = grantStatus1;
this.internetStatus = grantStatus2;
return;
}
} 若需查询应用是否允许使用蜂窝或Wi-Fi网络上网,可调用policy.getNetAccessPolicy接口查询自身应用的联网策略。