uni-app uni.chooseLocation 安卓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

更多关于uni-app uni.chooseLocation 安卓app安装后首次打开 选择位置地区列表一直等待中的实战教程也可以访问 https://www.itying.com/category-93-b0.html

20 回复

HBuilderX 4.0.2024012711-alpha 已修复。

更多关于uni-app uni.chooseLocation 安卓app安装后首次打开 选择位置地区列表一直等待中的实战教程也可以访问 https://www.itying.com/category-93-b0.html


以上问题,在华为 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);
        }
      });
回到顶部