HarmonyOS 鸿蒙Next:申请一些权限后,再想申请另外权限直接返回成功但实际不可调用对应权限方法
HarmonyOS 鸿蒙Next:申请一些权限后,再想申请另外权限直接返回成功但实际不可调用对应权限方法
在atManager.checkAccessToken(tokenID, permission)失败然后调用 atManager.requestPermissionsFromUser 申请了location权限后, 如果再次checkAccessToken另外的权限(GET_NETWORK_INFO),返回已经有权限,但是调用connection.getDefaultNetSync()失败抛出权限错误。
2 回复
申请了location权限后,调用下面这个方法试试
async checkNetPermission() {
let permissions: Array<Permissions> = ['ohos.permission.GET_NETWORK_INFO'];
let NetStatus = await this.accessToken(permissions[0]);
// 使用 getDefaultNetSync
if (NetStatus == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
console.log('Net 已经申请完权限了');
let netHandler = connection.getDefaultNetSync().netId;
console.log(netHandler.toString());
} else {
console.log('Net 需要申请权限');
let atManager = abilityAccessCtrl.createAtManager();
atManager.requestPermissionsFromUser(getContext(this), permissions, (err, permissionResult) => {
if (err) {
console.log('申请权限失败');
return;
}
let grantStatus: Array<number> = permissionResult.authResults;
let grantPermissions: Array<string> = permissionResult.permissions;
let length: number = grantStatus.length;
console.log('net user permissioned length: ' + JSON.stringify(grantPermissions) + ', length: ' + length);
for (let i = 0; i < length; i++) {
if (grantStatus[i] === 0) {
console.log('net user has agreed permissioned');
} else {
console.log('net user has disagree permissioned');
this.openPermissionSettings();
}
}
});
}
}
针对您提到的HarmonyOS鸿蒙Next系统中,在申请部分权限后,再申请其他权限直接返回成功但实际无法调用对应权限方法的问题,这通常可能是由于权限管理系统的内部逻辑错误、权限申请顺序问题或系统缓存导致的状态不一致。
在HarmonyOS系统中,权限的申请和使用需要遵循严格的流程。如果系统错误地返回了权限申请成功的状态,但实际并未正确授权,这可能是由于系统内部的bug或权限管理策略的不完善。
为了解决这个问题,您可以尝试以下步骤:
-
确保您的应用已经正确声明了所有需要的权限,并在用户界面中向用户清晰展示了权限申请的理由。
-
尝试重新申请权限,并检查是否有其他权限或系统状态影响了权限的申请结果。
-
清理应用缓存和数据,然后重新启动应用,看是否能解决问题。
-
检查HarmonyOS系统的更新,看是否有相关的系统修复。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。他们将能够提供更具体的帮助和解决方案。