1***@qq.com
1***@qq.com
  • 发布:2026-02-24 10:12
  • 更新:2026-02-24 11:07
  • 阅读:20

【报Bug】uni.getLocation会触发onShow,plus.android.requestPermissions也会触发onShow

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 4.87

手机系统: 全部

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

测试过的手机:

华为

操作步骤:

uni.getLocation会触发onShow
plus.android.requestPermissions也会触发onShow

预期结果:

不触发onShow

实际结果:

出发了onShow

bug描述:

用户拒绝定位的情况下,会触发onShow
onShow() {
console.log(555);
uni.getLocation({
type: 'gcj02',
geocode: true,
success: async (res) => {},
fail: (e) => {}
})
}
plus.android.requestPermissions同样

2026-02-24 10:12 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

作为 DCloud 官方评审人员,对该 bug 反馈进行如下评审:


一、反馈内容完整性评估

检查项 状态 说明
BUG 标题 ✅ 完整 明确指出 uni.getLocationplus.android.requestPermissions 触发 onShow
BUG 描述 ⚠️ 简略 仅一句话,未说明触发时机、是否必现、是否所有设备都复现
代码示例 ❌ 缺失 未提供任何可运行代码,无法判断调用方式是否正确
复现步骤 ⚠️ 不清晰 仅写“调用即触发”,未说明页面生命周期上下文、是否首次进入、是否已授权等关键信息
预期结果 ✅ 合理 不触发 onShow 是合理预期
实际结果 ✅ 描述清楚 明确说明触发了 onShow
分类信息 ✅ 完整 包含平台、版本、Vue 版本、设备等

结论:该反馈缺失代码示例复现步骤过于简略,建议用户补充以下内容:

  • 提供一个最小可复现的代码片段(如 App.vue 或页面中调用 uni.getLocation 的位置)
  • 说明触发 onShow 的上下文(如是否为首次进入页面、是否已授权、是否使用自定义基座)
  • 说明是否为必现问题,以及是否在所有设备上都复现

二、是否为已知问题或误报

根据知识库内容:

  • release-archive > 2.4.2.20191115 中提到:

    百度小程序修复 onShowonLoad 之前触发的 Bug

    但该记录为百度小程序平台,不适用于 App 平台

  • androidRelease > 2025-11-04 中未提及 getLocationrequestPermissions 触发 onShow 的问题。

  • 在对话知识库中,有用户反馈:

    “我在 app.vue 的 onLaunch 方法里调用请求,结果在 iOS 上超时,改成 onShow 就可以”

    这说明App 平台的生命周期行为可能存在平台差异,但并未明确说明 getLocation 会触发 onShow

结论:知识库中未明确记录 uni.getLocationplus.android.requestPermissions 会触发 onShow 的问题,因此不能判定为误报,但也不能确认为已知 bug,需进一步复现确认


三、是否为基本概念问题

  • 用户使用的是 Vue3 + App 平台(Android/iOS),未涉及鸿蒙或小程序。
  • onShow 是页面生命周期函数,不应由 API 调用触发,除非页面被重新拉起或权限弹窗导致页面生命周期重新触发。
  • plus.android.requestPermissions 是原生权限申请 API,可能触发系统弹窗,系统弹窗可能导致页面进入后台再返回前台,从而触发 onShow这在 Android 是系统行为非 uni-app bug

结论不能排除是系统行为导致的生命周期触发,建议用户确认:

  • 是否在调用 plus.android.requestPermissions 时,系统弹出了权限申请窗口?
  • 是否在调用 uni.getLocation 时,系统弹出了定位权限申请窗口?

四、官方建议回复(面向用户)

您好,感谢反馈。

根据目前提供的信息,我们暂时无法确认该问题是否为 uni-app 框架 bug。请您补充以下内容以便我们进一步定位:

  1. 提供一个最小可复现代码片段(如 App.vue 或页面中调用 uni.getLocation 的位置);
  2. 说明是否为必现问题,以及是否在所有设备上都复现;
  3. 确认是否在调用 plus.android.requestPermissionsuni.getLocation 时,系统弹出了权限申请窗口;
  4. 若可能,请提供真机日志(使用 HBuilderX 真机运行时的控制台输出)。

特别说明:在 Android 系统中,权限弹窗可能导致页面进入后台再返回前台,从而触发 onShow,此为系统行为,非 uni-app bug。

我们将根据您补充的信息进一步确认是否为框架问题。

内容为 AI 生成,仅供参考
1***@qq.com

1***@qq.com (作者) - 前腾讯移动事业群MIG负责人

用户拒绝定位的情况下,会触发onShow
onShow() {
console.log(555);
uni.getLocation({
type: 'gcj02',
geocode: true,
success: async (res) => {},
fail: (e) => {}
})
}
plus.android.requestPermissions同样

要回复问题请先登录注册