uni-app 更新打包最新的SDK后 Android定位不及时和部分机型不能定位的问题
uni-app 更新打包最新的SDK后 Android定位不及时和部分机型不能定位的问题
示例代码:
uni.getLocation({
type: "gcj02",
isHighAccuracy: true, //开启高精度定位
geocode: false, //是否解析地址信息
success: async (res) => {
//基础定位信息-位置信息
result.longitude = res.longitude;
result.latitude = res.latitude;
if (options.extensions) {
//调用高德逆编码接口,实现经纬度解析。
} else {
result = {};
result.longitude = res.longitude;
result.latitude = res.latitude;
}
},
fail: async (res) => {
let message = '定位失败。编号:' + res.code + ',错误编号:' + res.errCode + ',消息:' + res.errMsg;
//发送message到服务器
}
})
## 操作步骤:
目前主要是通过客诉反馈,最近收到大量客诉,大部分是因为定位延时大,还有部分新手机无法定位,如Mate60Pro.
## 预期结果:
根据高德的反馈,希望能够选择高德定位SDK的版本,高德地图的官方人员建议如果不上应用市场,可以将定位SDK降低版本,来解决此问题。
## 实际结果:
解决定位延迟不及时和高版本定位的问题。
## bug描述:
2024年4月10日,我们发布了一个新版本的uniapp版本,更新HuilderX到4.0.8版本。更新后,出现大量的客诉,普遍的问题是定位不准确。其中主要是Mate60Pro不能定位,后续陆续出现很多反馈定位不及时的原因。
经过咨询:
1. 本次更新后,高德定位SDK6.4.3版本,因我们购买了高德商用服务,咨询了高德官方,说因为合规性问题,降低了定位的刷新频率,也就是说,为了合规性问题,可能导致定位更新不及时的原因。 我们的app主要用于公司销售人员拜访客户,最近出现的问题是经常拜访后,前往下一个网点,定位时还显示上一个门店的定位,要多次刷新,反复才能更新到最新位置。
2. 高版本的华为手机会出现无法定位的原因,目前高德无法根本解决。
我收集了用户手机调用uni.getlocation方法后的错误信息。
错误信息:定位失败。编号:4,错误编号:4,消息:getLocation:fail [geolocation:6]定位结果错误 请到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/查看错误码说明,错误详细信息:#id:Sb2FhNWNiZzg3ZjQ0MGlkcHNwcnByMTY2ZmRjMTNlLA==#csid:d453c0d90bbe454d9c995fccc7c80015location faile retype: rdesc:78#0601#pm111111
编号:2,错误编号:2,消息:getLocation:fail [geolocation:13]网络定位失败,请检查设备是否插入sim卡,是否开启移动网络或开启了wifi模块 请到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/查看错误码说明,错误详细信息:获取到的基站和WIFI信息均为空,请检查是否授予APP定位权限#1302#pm111111
错误信息:定位失败。编号:2,错误编号:2,消息:getLocation:fail [geolocation:13]网络定位失败,请检查设备是否插入sim卡,是否开启移动网络或开启了wifi模块 请到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/查看错误码说明,错误详细信息:获取到的基站和WIFI信息均为空,请检查是否授予APP定位权限#1302#pm111111
信息项 | 信息值 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | Windows 10 专业版 22H2 19045.2251 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.08 |
手机系统 | Android |
手机系统版本号 | Android 14 |
手机厂商 | 华为 |
手机机型 | Mate系列 荣耀系列 等 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
更多关于uni-app 更新打包最新的SDK后 Android定位不及时和部分机型不能定位的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
解决了吗 同样的问题
更多关于uni-app 更新打包最新的SDK后 Android定位不及时和部分机型不能定位的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
回复 bobbbb: 我已经被客诉搞疯了,目前发布了小程序版本,使用小程序就定位正常。
回复 Francis8192: 有没有试过不接高德 用其他平台的方案
回复 bobbbb: 没有,定位商用服务每家都是5W大洋,都买伤不起。目前只购买了高德商用服务。
回退hb版本到3.87试试
我也是,4.08打包出来的,华为的定位还一直报错。回退到3.99重新打包好像就没这个错了,你可以试下
我尝试将hb降低到3.87,打包sdk用的3.82,目前在测试中。
回复 Francis8192: 测试结果如何了
回复 bobbbb: 目前测试结果是, 3.82的定位刷新频率高一些,不过没有具体数值。 就是定位在一段时间内刷新的时间短些。更新到 4.08后,时间被拉长。还有就是高版本的定位偏差会大一些。 目前没有找到合适的解决办法。目前我们的用户都已经被引导用微信小程序了。
回复 Francis8192: 华为的定位SDK
现在不仅华为,红米K40也出现一样的问题了。难顶
是的,目前我还没有彻底解决这个问题,转小程序了。
在uni-app中更新打包最新的SDK后,如果遇到Android定位不及时或部分机型无法定位的问题,可能是由于以下几个原因引起的。以下是一些排查和解决问题的步骤:
1. 检查权限配置
确保在 AndroidManifest.xml
中正确配置了定位所需的权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
同时,确保在应用中动态申请了权限(Android 6.0及以上版本需要动态申请权限)。
2. 检查定位服务配置
在uni-app中,定位功能通常依赖于高德地图、百度地图或腾讯地图等第三方SDK。确保在 manifest.json
中正确配置了相关服务的AppKey等信息。
例如,使用高德地图:
"app-plus": {
"modules": {
"Geolocation": {
"provider": "amap",
"key": "你的高德地图AppKey"
}
}
}
3. 更新SDK版本
确保使用的uni-app SDK和第三方定位SDK是最新版本。旧版本可能存在兼容性问题。可以通过以下方式更新:
- 在HBuilderX中更新uni-app SDK。
- 更新第三方定位SDK(如高德地图、百度地图等)。
4. 检查定位代码
确保在代码中正确使用了定位API。例如:
uni.getLocation({
type: 'wgs84',
success: (res) => {
console.log('经度:' + res.longitude);
console.log('纬度:' + res.latitude);
},
fail: (err) => {
console.error('定位失败:', err);
}
});
5. 检查机型兼容性
部分Android机型可能存在系统兼容性问题,尤其是定制系统(如小米、华为等)可能会限制后台定位。可以尝试以下方法:
- 检查是否开启了系统的定位服务。
- 在系统设置中允许应用后台运行和定位。
- 针对特定机型,可能需要手动添加白名单或忽略电池优化。
6. 调试日志
开启调试日志,查看定位失败的具体原因。可以通过以下方式:
uni.getLocation({
type: 'wgs84',
success: (res) => {
console.log('定位成功:', res);
},
fail: (err) => {
console.error('定位失败:', err);
}
});