参考以下代码:
在配置文件module.json5中声明ohos.permission.MICROPHONE权限后:
import { abilityAccessCtrl, common, PermissionRequestResult, Permissions, Want } from '@kit.AbilityKit';
import { bundleManager } from '@kit.AbilityKit';
@Entry
@Component
struct PermissionManager {
PERMISSION_LIST: Permissions[] = ["ohos.permission.MICROPHONE"];
requestPermission(permissionList: Array<Permissions>) {
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
atManager.requestPermissionsFromUser(context, permissionList).then((data: PermissionRequestResult) => {
// dialogShowResults数组长度根据申请权限的数量判断,以下以单个权限申请为例
if (data.dialogShownResults && data.dialogShownResults[0]) { // 用户首次申请,弹框
let grantStatus: Array<number> = data.authResults;
if (grantStatus[0] === 0) {
// 用户授权,可以继续访问目标操作
} else {
// 用户拒绝授权,提示用户涉及该权限的功能无法继续使用
return;
}
} else if (data.dialogShownResults && !data.dialogShownResults[0]) {
// 非首次申请,跳转到系统设置页进行关闭或打开权限的操作
bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT, (err, bundleInfo) => {
if (err) {
console.error(`Failed to getBundleInfoForSelf. Code: ${err.code}, message: ${err.message}`);
return;
}
let want: Want = {
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'application_info_entry',
// 传递你的应用的包名作为参数
parameters: {
pushParams: bundleInfo.name ?? ''
}
};
context.startAbility(want)
.then(() => {
console.info('Success to startAbility');
})
.catch((err: BusinessError<Error>) => {
console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`);
});
});
}
}).catch((err: BusinessError<Error>) => {
console.error(`data: ${err}`);
});
}
build() {
Column() {
Button('requestPermission')
.onClick(() => {
this.requestPermission(this.PERMISSION_LIST);
})
}
.alignItems(HorizontalAlign.Center)
.justifyContent(FlexAlign.Center)
.width('100%')
.height('100%')
}
}