十三啊
十三啊
  • 发布:2026-01-14 17:22
  • 更新:2026-01-14 17:26
  • 阅读:88

【报Bug】uni.getLocation在确认定位权限和定位功能打开的情况下,还是运行失败回调fail

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: windous10

HBuilderX类型: 正式

HBuilderX版本号: 4.45

手机系统: Android

手机系统版本号: Android 14

手机厂商: 华为

手机机型: harmonyOS 4.2.0的手机(Pura 70 Pro,Mate X6)

页面类型: vue

vue版本: vue2

打包方式: 离线

项目创建方式: HBuilderX

示例代码:

new Promise((resolve, reject) => {
uni.getLocation({
type: 'gcj02',
geocode: 'true',
success: function(res) {
console.log(res)
},
fail: function(err) {
console.log(res)
resolve()
}
})
})

操作步骤:

在app定位弹框出现的时候,点击拒绝或者没有开启精准定位,不关闭app挂在后台运行,而后手动到设置中-应用与服务-应用管理-对应app的应用信息中去开启定位权限或者开启精准位置,在返回app调用uni.getLocation,该方法还是调用错误回调fail

预期结果:

用户点击拒绝和关闭精准定位后,手动到应用信息页打开后,能正常获取到经纬度,而不是错误回调fail

实际结果:

用户点击拒绝和关闭精准定位后,手动到应用信息页打开后,无法正常获取到经纬度,始终调用的fail

bug描述:

在定位权限和定位功能都打开的情况下,uni.getLocation方法获取经纬度失败,不是走的success,而是走失败回调fail

2026-01-14 17:22 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

该bug反馈内容基本完整,但存在关键问题:用户将HarmonyOS设备(Pura 70 Pro/Mate X6)错误归类为Android平台,而知识库明确说明"鸿蒙平台与App(安卓和iOS)通常是分开并立的"。反馈中代码示例存在明显错误:fail回调中使用了console.log(res)而非err参数,可能导致用户误判问题。

根据知识库分析:

  1. HBuilderX 4.23+已支持HarmonyOS(用户使用4.45符合要求),但需注意鸿蒙平台不支持app-plus相关API
  2. 知识库指出HarmonyOS定位需特殊处理,且"不同平台打开的地图不一样"
  3. 用户描述的场景涉及权限动态变更,知识库提到"2.9.9版本以上优化uni.getLocation支持IP定位",但未说明权限变更后是否需要应用重启

该问题很可能属于HarmonyOS平台特性:系统权限变更后,部分设备需要应用完全重启(而非切回前台)才能生效,而非uni-app框架bug。建议用户:

  1. 修正代码错误(fail回调使用err参数)
  2. 尝试完全关闭应用后重新启动
  3. 检查manifest.json是否正确配置HarmonyOS定位权限
  4. 参考HarmonyOS定位文档确认坐标类型兼容性

此反馈疑似误报,核心问题在于平台差异认知不足和代码实现错误,非框架功能缺陷。

内容为 AI 生成,仅供参考
DCloud_UNI_yuhe

DCloud_UNI_yuhe

手动设置的得重启应用才会生效的

  • 十三啊 (作者)

    没有其他解决方案吗?现在用户反馈的很多,体验上不是特别好

    2026-01-14 17:41

  • 十三啊 (作者)

    在其他厂商手机都是正常的,同样的操作不会复现,只有华为4.x.x的系统会出现,初步判断是跟精准定位有关

    2026-01-14 17:45

要回复问题请先登录注册