1. uniapp真机运行鸿蒙定位报getLocation:fail maybe not obtain GPS Permission
uniapp真机运行鸿蒙定位报getLocation:fail maybe not obtain GPS Permission。

1.1. 问题原因分析
(1)未在 manifest.json 中配置定位权限
在 HarmonyOS 应用中,你需要在 manifest.json 文件中显式声明定位权限,否则系统不会授予应用访问位置信息的权限。
(2)未在鸿蒙设备上开启定位权限
即使你在代码中申请了权限,如果用户没有手动在系统设置中开启定位权限,应用也无无法获取位置信息。
(3)未正确调用 uni.getLocation() 或 getlocation 方法
有些版本的 UniApp 对 HarmonyOS 的支持不够完善,可能需要额外处理或使用原生 API。
1.2. 解决方案
官方文档:https://uniapp.dcloud.net.cn/api/location/location.html#harmony-set-location

把 unpackages/dist/dev/app-harmony/entry/src/main/module.json5 文件复制放到 [HBuilderX 工程目录]/harmony-configs/entry/src/main/module.json5
把 unpackages/dist/dev/app-harmony/entry/src/main/resources/base/element/string.json 将其复制到 [HBuilderX 工程目录]/harmony-configs/entry/src/main/resources/base/element/string.json
编辑 module.json5,在 requestPermissions 中添加下面代码
javascript
{
"name": "ohos.permission.APPROXIMATELY_LOCATION",
"reason": "$string:location_reason",
"usedScene": {
"when": "inuse"
}
},
{
"name": "ohos.permission.LOCATION",
"reason": "$string:location_reason",
"usedScene": {
"when": "inuse"
}
}
里的定位和模糊定位务必同时存在,否则会被上架驳回。在 api 可在 isHighAccuracy 属性中切换。
这里的 reason 值为 $string: 开头,不可直接中文字符,需要使用资源引用。编辑刚才复制的 harmony-config 目录中的 string.json,添加下面代码并改写 value。
javascript
{
"name": "location_reason",
"value": "用于提供 xx 服务"
}
