uni-app uni.chooseLocation 安卓app安装后首次打开 选择位置地区列表一直等待中
uni-app uni.chooseLocation 安卓app安装后首次打开 选择位置地区列表一直等待中
操作步骤:
- uni.chooseLocation 安卓app第一次安装然后打开获取不到地区列表
预期结果:
- uni.chooseLocation 安卓app第一次安装然后打开能够获取地区列表
实际结果:
- uni.chooseLocation 安卓app第一次安装然后打开获取不到地区列表
bug描述:
- uni.chooseLocation 安卓app第一次安装然后打开获取不到地区列表,杀掉app进程,重新打开可以获取地区列表。
- 这个问题已经存在10个月了,相关帖子如下:
信息表
信息类别 | 信息内容 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Mac |
PC操作系统版本 | 14.1.2 (23B92) |
HBuilderX类型 | 正式 |
HBuilderX版本 | 3.96 |
手机系统 | Android |
手机系统版本 | Android 10 |
手机厂商 | 华为 |
手机机型 | 华为 P40 |
页面类型 | vue |
vue版本 | vue3 |
打包方式 | 离线 |
项目创建方式 | HBuilderX |
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
回复 Cherishs: 更新到最新版
回复 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
}
})
},
问题已复现
回复 择善固执: 下一个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); } });
- 检查调用