HarmonyOS鸿蒙Next中权限的获取,包含提醒用户是否“允许”、免允许组件demo
HarmonyOS鸿蒙Next中权限的获取,包含提醒用户是否“允许”、免允许组件demo 权限的获取,包含提醒用户是否“允许”、免允许组件demo
4 回复
Index文件中:
import { abilityAccessCtrl, bundleManager, common, Permissions, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
const permissions: Array<Permissions> = ["ohos.permission.CAMERA"];
async function checkPermissions(): Promise<void> {
let grantStatus: abilityAccessCtrl.GrantStatus = await checkAccessToken(permissions[0]);
if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
// 已经授权,可以继续访问目标操作
console.log("已经授权,可以继续访问目标操作")
} else {
// 申请相机权限
const context: common.UIAbilityContext = getContext() as common.UIAbilityContext;
reqPermissionsFromUser(permissions, context);
}
}
async function checkAccessToken(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;
}
//向用户申请权限
function reqPermissionsFromUser(permissions: Array<Permissions>, context: common.UIAbilityContext): void {
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
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 {
// 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
openPermissionsInSystemSettings(context)
return;
}
}
// 授权成功
}).catch((err: BusinessError) => {
console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
})
}
//前往设置界面
function openPermissionsInSystemSettings(context: common.UIAbilityContext): void {
// let context = getContext(this) as common.UIAbilityContext
let wantInfo: Want = {
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'application_info_entry',
parameters: {
settingsParamBundleName: 'com.example.perssions' // Open the details page of a specified application.
}
}
context.startAbility(wantInfo).then(() => {
}).catch((error: Error) => {
})
}
@Entry
@Component
struct Index {
aboutToAppear() {
checkPermissions()//检查用户是否授予权限
}
build() {
Row() {
Column() {
}
.width('100%')
}
.height('100%')
}
}
更多关于HarmonyOS鸿蒙Next中权限的获取,包含提醒用户是否“允许”、免允许组件demo的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,权限获取涉及提醒用户是否“允许”以及免允许组件的实现。鸿蒙Next的权限管理机制基于ArkTS语言,开发者通过调用@ohos.abilityAccessCtrl
模块中的API来请求权限。例如,使用requestPermissionsFromUser
方法向用户弹窗请求权限,用户可以选择“允许”或“拒绝”。对于免允许组件,鸿蒙Next提供了ohos.permission.USE_BLUETOOTH
等系统权限,这些权限无需用户显式授权即可使用,但需在config.json
中声明。开发者需遵循鸿蒙Next的权限设计规范,确保权限请求合理且符合隐私保护要求。
在HarmonyOS鸿蒙Next中,权限获取需通过AbilityContext.requestPermissionsFromUser
方法向用户申请权限,系统会弹出对话框提示用户选择“允许”或“拒绝”。对于某些免允许权限(如网络状态),无需用户授权即可直接使用。以下是一个简单的权限申请Demo:
let permissions = ['ohos.permission.CAMERA'];
let requestCode = 1;
this.context.requestPermissionsFromUser(permissions, requestCode).then((data) => {
if (data.authResults[0] === 0) {
console.log('用户允许权限');
} else {
console.log('用户拒绝权限');
}
});
免允许权限可直接调用相关API,无需额外申请。