HarmonyOS鸿蒙Next中uniapp开发的应用,第一次申请权限拒绝后,如何再次申请权限
HarmonyOS鸿蒙Next中uniapp开发的应用,第一次申请权限拒绝后,如何再次申请权限 uniapp开发的鸿蒙应用,第一次申请权限拒绝后,如何再次申请权限
可以参考一下这个
export const requestPermission = async () => {
const permissions: Permissions[] = ["ohos.permission.ACCESS_BLUETOOTH"];
let atManager: abilityAccessCtrl.AtManager =
abilityAccessCtrl.createAtManager();
const context = UTSHarmony.getUIAbilityContext();
// 首次授权弹窗
UTSHarmony.requestSystemPermission(
permissions,
(allRight, grantedList) => {
console.log(1, allRight, grantedList);
},
async (doNotAskAgain: boolean, grantedList: Array<string>) => {
console.log(2, doNotAskAgain, grantedList);
if (doNotAskAgain) {
// 如果拒绝了授权,拉起权限设置弹框
const res = await atManager.requestPermissionOnSetting(
context,
permissions
);
console.log("再次授权弹窗", res);
}
}
);
};
更多关于HarmonyOS鸿蒙Next中uniapp开发的应用,第一次申请权限拒绝后,如何再次申请权限的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,使用uniapp开发的应用,第一次权限被拒绝后,再次申请需调用abilityAccessCtrl.requestPermissionsFromUser()接口。请求前通过abilityAccessCtrl.checkAccessToken()检查权限状态,若为拒绝,再次调用requestPermissionsFromUser即可弹出系统权限弹窗,用户可选择授予。注意无需跳转设置界面,系统会自动处理重复请求逻辑。
在 HarmonyOS Next 中,权限申请遵循标准机制:首次调用 requestPermissionsFromUser 会弹出授权对话框,如果用户拒绝并勾选“不再提醒”,后续再次请求将不会弹窗,直接返回失败。此时需要引导用户到应用权限管理页手动开启。
在 uniapp 开发的鸿蒙应用里,可以通过 条件编译 + Native.js 或 UTS 插件 调用鸿蒙原生 API 实现。核心思路:
- 申请权限前,先用
checkAccessToken检查权限状态。 - 未授权则调用
requestPermissionsFromUser。 - 若返回失败(denied 且不再提示),调用
openPermissionManagementPage跳转到系统权限设置页。
以下为 ArkTS 侧简化示例(可放入 uniapp 项目的 native/ 或通过 uts 插件实现):
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
// 权限列表
const PERMISSIONS: Array<string> = ['ohos.permission.CAMERA'];
export function requestPermission(callback: (result: boolean) => void) {
const context = getContext(this) as common.UIAbilityContext;
const atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
atManager.requestPermissionsFromUser(context, PERMISSIONS, (err, data) => {
if (err) {
// 若拒绝且不再提示,跳转设置
if ((err as BusinessError).code === 1) { // 示例错误码,实际需判断
openSettings();
}
callback(false);
} else {
// 检查结果
let allGranted = data.authResults.every((r: number) => r === 0);
if (!allGranted) {
openSettings();
}
callback(allGranted);
}
});
}
function openSettings() {
const context = getContext(this) as common.UIAbilityContext;
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
let permissionManager = abilityAccessCtrl.createAtManager();
permissionManager.openPermissionManagementPage(context, {
bundleName: context.abilityInfo.bundleName,
}).catch((err: BusinessError) => {
console.error('打开权限设置失败', err);
});
}
在 uniapp 页面中,通过条件编译调用该原生方法,当用户拒绝权限后,自动拉起权限管理页,用户可手动授予权限。此方案适用于所有受运行时权限管控的能力(相机、位置、存储等)。
注意:部分权限为 user_grant 级别才需要此流程;权限名需从[鸿蒙权限列表]中查询。首次拒绝未勾选“不再提醒”时,重复调用仍会弹窗,但用户体验不佳,建议同样跳转设置页。

