uni-app uni.chooseLocation 安卓app安装后首次打开 选择位置地区列表一直等待中

发布于 1周前 作者 bupafengyu 来自 Uni-App

uni-app uni.chooseLocation 安卓app安装后首次打开 选择位置地区列表一直等待中

操作步骤:

  • uni.chooseLocation 安卓app第一次安装然后打开获取不到地区列表

预期结果:

  • uni.chooseLocation 安卓app第一次安装然后打开能够获取地区列表

实际结果:

  • uni.chooseLocation 安卓app第一次安装然后打开获取不到地区列表

bug描述:

信息表

信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Mac
PC操作系统版本 14.1.2 (23B92)
HBuilderX类型 正式
HBuilderX版本 3.96
手机系统 Android
手机系统版本 Android 10
手机厂商 华为
手机机型 华为 P40
页面类型 vue
vue版本 vue3
打包方式 离线
项目创建方式 HBuilderX

20 回复

HBuilderX 4.0.2024012711-alpha 已修复。


以上问题,在华为 P40, 红米K30S 发现,其它机型暂时没有测试。

hellouniapp示例页面正常,测试设备荣耀10、mate40pro,你发个apk看看

回复 DCloud_Android_THB: 请查看我对问题的回复,已经找到原因了,需要 uniapp 跟进修复,我猜测可能是 传递过去的经纬度不在当前窗口导致的,纯粹猜测。

回复 DCloud_Android_THB: 辛苦您有空的时候帮忙看下我那个帖子问题吧?https://ask.dcloud.net.cn/question/186212

回复 DCloud_Android_THB:你好官方老师,为什么自定义基座uni.chooseLocation打开后位置信息一直在转圈 高德的信息全配置好了

回复 Cherishs: 更新到最新版

回复 DCloud_Android_THB: 更新Hbuilder吗 我这是4.24版本

回复 Cherishs: 是因为腾讯把权限收回导致的吗

回复 Cherishs: 你看具体报错信息和腾讯接口过期的bug是否相符?

回复 DCloud_Android_THB: 我是最新的4.6版本的还是不行

原因找到了,以下做法可以重现bug。

下载 hello-uniapp-master (https://github.com/dcloudio/uni-app)
找到文件 “/hello-uniapp-master/pages/API/choose-location.vue”,定位到函数,向uni.chooseLocation参数中设置 longitude, latitude 值,编译运行,问题重现。 chooseLocation: function () {
uni.chooseLocation({
/* 指定下面经纬度两个参数,app安装后第一次运行,会出现位置列表一直等待情况,
如果关闭app,重新打开运行正常。
*/
longitude: 114.085947, // 深圳经纬度
latitude: 22.547,
success: (res) => {
this.hasLocation = true,
this.location = formatLocation(res.longitude, res.latitude),
this.locationAddress = res.address
}
})
},

问题已复现

回复 DCloud_Android_THB: 问下会尽快修复吗? 麻烦提升下优先级,我们华为渠道因为这个问题一直不让上线。

回复 择善固执: 下一个alpha版本会带上

大神怎么搞还是不太懂 我也出现了这个问题

更新最新的sdk,已经修复了。

回复 择善固执: 大神 我的这个hbuild更新到最新版了 还是有这个问题 是咋回事啊?

回复 择善固执: SDK怎么更新

在使用 uni.chooseLocation 时,如果安卓 App 安装后首次打开时选择位置地区列表一直处于“等待中”状态,可能是由于以下原因导致的。以下是一些可能的原因和解决方法:


1. 定位权限未授权

  • 原因:首次打开 App 时,系统可能未授予定位权限,导致无法获取位置信息。
  • 解决方法
    • 在 App 中主动请求定位权限,确保用户授予了定位权限。
    • manifest.json 中配置定位权限:
      "permission": {
        "scope.userLocation": {
          "desc": "请允许访问您的位置"
        }
      }
    • 使用 uni.authorize 动态请求权限:
      uni.authorize({
        scope: 'scope.userLocation',
        success() {
          console.log('定位权限已授权');
        },
        fail() {
          console.log('定位权限未授权');
        }
      });

2. 网络问题

  • 原因:如果网络连接不稳定,可能导致位置数据无法加载。
  • 解决方法
    • 检查设备的网络连接,确保网络正常。
    • 在代码中添加网络状态检查逻辑,提示用户检查网络。

3. 地图服务未初始化

  • 原因uni.chooseLocation 依赖于地图服务(如高德地图、腾讯地图等),如果地图服务未初始化成功,可能导致无法加载位置数据。
  • 解决方法
    • 确保在 manifest.json 中正确配置了地图服务(如高德地图的 AppKey)。
    • 检查地图服务是否初始化成功,可以在 onLaunch 中初始化地图服务:
      uni.getLocation({
        type: 'wgs84',
        success(res) {
          console.log('地图服务初始化成功');
        },
        fail(err) {
          console.log('地图服务初始化失败', err);
        }
      });

4. 首次加载缓存问题

  • 原因:首次打开 App 时,可能需要加载地图数据,导致加载时间较长。
  • 解决方法
    • uni.chooseLocation 调用前,添加加载提示,提升用户体验:
      uni.showLoading({
        title: '加载中...',
        mask: true
      });
      uni.chooseLocation({
        success(res) {
          uni.hideLoading();
          console.log('选择位置成功', res);
        },
        fail(err) {
          uni.hideLoading();
          console.log('选择位置失败', err);
        }
      });

5. 地图服务 SDK 问题

  • 原因:如果使用的是第三方地图服务(如高德地图、腾讯地图),可能是 SDK 未正确集成或版本不兼容。
  • 解决方法
    • 检查 manifest.json 中地图服务的配置是否正确。
    • 确保使用的 SDK 版本是最新的,并按照官方文档正确集成。

6. 设备兼容性问题

  • 原因:某些安卓设备可能存在兼容性问题,导致 uni.chooseLocation 无法正常工作。
  • 解决方法
    • 测试不同设备,确认是否为特定设备问题。
    • 如果问题仅出现在某些设备上,可以尝试使用其他定位方式(如 uni.getLocation)作为备选方案。

7. 代码逻辑问题

  • 原因:代码中可能存在逻辑错误,导致 uni.chooseLocation 无法正常调用。
  • 解决方法
    • 检查调用 uni.chooseLocation 的代码逻辑,确保参数正确。
    • 示例代码:
      uni.chooseLocation({
        success(res) {
          console.log('选择位置成功', res);
        },
        fail(err) {
          console.log('选择位置失败', err);
        }
      });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!