HarmonyOS 鸿蒙Next 应用中多个关联模块权限申请问题:对构建har包的每个模块及主模块的module.json5都需申请同样权限,还是只申请一个?

发布于 1周前 作者 eggper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 应用中多个关联模块权限申请问题:对构建har包的每个模块及主模块的module.json5都需申请同样权限,还是只申请一个?

使用A模块构建了har依赖包,在A模块编写了一个获取权限的操作,但提示201错误,访问被拒绝为什么?

cke_2377.png


更多关于HarmonyOS 鸿蒙Next 应用中多个关联模块权限申请问题:对构建har包的每个模块及主模块的module.json5都需申请同样权限,还是只申请一个?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复
import { connection } from '[@kit](/user/kit).NetworkKit';
import { BusinessError } from '[@kit](/user/kit).BasicServicesKit';
import { abilityAccessCtrl, Permissions } from '[@kit](/user/kit).AbilityKit';

const permissions: Array<Permissions> = ['ohos.permission.GET_NETWORK_INFO'];

[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
build() {
Column() {
Button('测试')
.onClick(() => {
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
// requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
atManager.requestPermissionsFromUser(getContext(this), 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) {
// 用户授权,可以继续访问目标操作
try {
let netHandle = connection.getDefaultNetSync();
if (!netHandle || netHandle.netId === 0) {
return;
}
let netCapability = connection.getNetCapabilitiesSync(netHandle);
console.log('startLog| 获取网络信息成功:', JSON.stringify(netCapability.bearerTypes));
} catch (e) {
let err = e as BusinessError;
console.error('startLog| 获取网络信息失败: ' + (err as BusinessError).code + ', errMessage: ' +
(err as BusinessError).message);
}
} else {
// 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
return;
}
}
// 授权成功
}).catch((err: BusinessError) => {
console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
})
})
}
}
}

这个代码试下,虽然不是har里面,但是我这边不会报201

更多关于HarmonyOS 鸿蒙Next 应用中多个关联模块权限申请问题:对构建har包的每个模块及主模块的module.json5都需申请同样权限,还是只申请一个?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


不行哥,试了下还是会报错

虚拟机支持这个操作吗?
尝试仅在构建har模块的地方申请了权限,在主模块调用的地方并没有申请。依旧报错如下cke_3867.png

每个模块和主模块,申请全新只要一个地方申请就行了。

至于代码报错,201,看你应该是使用了定位或则地图相关api,201不一定是没申请权限,可能是你使用地图服务,有配置不对,出现了201。

可以检查时是否使用调试证书,是否开通定位或则位置服务,是否配置clientId。

我是想要调用一下网络权限,在虚拟机获取当前网络状态,代码如下: try { let netHandle = connection.getDefaultNetSync(); if (!netHandle || netHandle.netId === 0) { return; } let netCapability = connection.getNetCapabilitiesSync(netHandle); console.log(‘startLog| 获取网络信息成功:’, JSON.stringify(netCapability.bearerTypes)); } catch (e) { let err = e as BusinessError; console.error('startLog| 获取网络信息失败: ’ + (err as BusinessError).code + ', errMessage: ’ + (err as BusinessError).message); } 。 一直在报错获取网络信息失败 201。当前模块是构建.har的模块,整体的moudle.json图在下面

在HarmonyOS 鸿蒙Next应用中,关于多个关联模块权限申请的问题,处理方式如下:

每个模块(包括主模块和har包中的各个子模块)的权限申请是独立的。这意味着,如果不同模块需要相同的权限,你需要在每个模块的module.json5文件中分别声明这些权限。这是因为每个模块在运行时都作为一个独立的实体进行权限管理和控制,系统会根据每个模块声明的权限来决定是否授予相应的访问能力。

具体到module.json5的配置,你需要确保每个需要特定权限的模块都包含了相应的reqPermissions字段,并列出该模块所需的所有权限。这样做可以确保在模块加载或功能执行时,系统能够正确识别和验证权限,从而提高应用的安全性和稳定性。

因此,对于你的问题,如果多个模块都需要同样的权限,你需要在每个模块的module.json5中都进行声明,而不是只在一个地方申请。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部