uniapp 开发鸿蒙next 之权限_uniapp配置鸿蒙new动态请求权限完整教程
最近需要开发一个鸿蒙next的App,需要获取用户的定位权限。
1.配置对应的权限
直接贴代码了,在目录 你的项目/harmony-configs/entry/src/main/module.json5。 应用需要在module.json5配置文件的requestPermissions标签中声明权限。声明权限的文档中心
可选填写,该字段用于应用上架校验,当申请的权限为user_grant权限时必填,并且需要进行多语种适配。
使用string类资源引用。格式为$string: ***。
可参考权限使用理由的文案内容规范。
权限使用的场景,该字段用于应用上架校验。包括abilities和when两个子项。
- abilities:使用权限的UIAbility或者ExtensionAbility组件的名称。
- when:调用时机。
usedScene必填。
- abilities:可选填写,可以配置为多个UIAbility或者ExtensionAbility名称的字符串数组。
- when:可选填写,但如果配置此字段,只能填入固定值inuse(使用时)、always(始终),不能为空。
当申请的权限为user_grant权限时建议填写。
代码样例
{ \"module\" : { // ... \"requestPermissions\":[ { \"name\" : \"ohos.permission.PERMISSION1\", \"reason\": \"$string:reason\", \"usedScene\": { \"abilities\": [ \"FormAbility\" ], \"when\":\"inuse\" } }, { \"name\" : \"ohos.permission.PERMISSION2\", \"reason\": \"$string:reason\", \"usedScene\": { \"abilities\": [ \"FormAbility\" ], \"when\":\"always\" } } ] }}
2.动态权限
动态权限需要先检测是否获取权限,uni.getAppAuthorizeSetting 需要在HbuilderX4.31以上的才能用,所以必须要用真机调试。贴代码
// #ifdef APP-HARMONYconst authorized = uni.getAppAuthorizeSetting()if(authorized.locationAuthorized === \'authorized\' ){}// #endif
3.定位权限配置
- 鸿蒙系统 不支持系统定位,需要配置三方sdk,比如高德,同时设置坐标系参数为
type: \'gcj02\'
-
map组件及定位等api
新增于HBuilderX 4.26,仅4.31之前的版本使用下面的配置方式,4.31及之后的版本请在manifest.json可视化界面配置。
map组件、getLocation、openLocation、chooseLocation依赖于地图厂商。目前仅支持腾讯地图,且此界面上显示的地图是通过webview加载的。由于目前页面使用的并非http协议,因此在申请腾讯地图key时需要将域名白名单留空以便地图能正确加载出来。后续在harmonyOS上页面会调整成以http方式加载,到时可以在腾讯地图控制台配置域名白名单。
在uni-app项目内配置腾讯地图key:
- 以源码方式打开项目manifest.json
-
在manifest.json内放入如下内容:
-
{ // ... \"app-plus\" : { // ... \"distribute\" : { // ... \"sdkConfigs\" : { // ... \"maps\" : { \"qqmap\" : { \"key\" : \"XXX-XXXX-XXXX\" } } } } }, // ...}
4.请求定位
// #ifdef APP-HARMONYconst authorized = uni.getAppAuthorizeSetting()if(authorized.locationAuthorized === \'authorized\' ){ uni.getLocation({type: \'gcj02\',success: function (res) {console.log(\'当前位置的经度:\' + res.longitude);console.log(\'当前位置的纬度:\' + res.latitude);}});}else { //打开 手机权限配置uni.openAppAuthorizeSetting({success(e) {}})}// #endif
创作不易,请关注点赞收藏,感谢