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

17 回复

解决了吗 同样的问题

更多关于uni-app 更新打包最新的SDK后 Android定位不及时和部分机型不能定位的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


并没有,现在主要的问题是更新4.08SDK后,高德定位延迟问题, 经常不准,偏差大, 到达新地点后, 定位还是上一次定位地点。

回复 Francis8192: 我们跟你们一样的场景 都是销售拜访客户 现在投诉很大 哎

回复 bobbbb: 我已经被客诉搞疯了,目前发布了小程序版本,使用小程序就定位正常。

回复 Francis8192: 有没有试过不接高德 用其他平台的方案

回复 bobbbb: 没有,定位商用服务每家都是5W大洋,都买伤不起。目前只购买了高德商用服务。

回退hb版本到3.87试试

我也是,4.08打包出来的,华为的定位还一直报错。回退到3.99重新打包好像就没这个错了,你可以试下

我尝试将hb降低到3.87,打包sdk用的3.82,目前在测试中。

回复 Francis8192: 测试结果如何了

回复 Francis8192: 有结果了吗,兄弟, 我这边也是使用4+hx 打的包,很多型号的华为手机,客户反馈定不了位(权限都已经授权)。 期待兄弟结果。。

回复 bobbbb: 目前测试结果是, 3.82的定位刷新频率高一些,不过没有具体数值。 就是定位在一段时间内刷新的时间短些。更新到 4.08后,时间被拉长。还有就是高版本的定位偏差会大一些。 目前没有找到合适的解决办法。目前我们的用户都已经被引导用微信小程序了。

回复 bzliukai: 这个目前没有好办法解决, 你说的华为,应该是新出的机型导致的。之前问过高德官方工程师,说是要集成什么换位的定位SDK。扯淡的很,不知道买了商用服务有什么用,定位不了,玩不下去了。

回复 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);
  }
});
回到顶部