App中使用高德定位服务,少部分用户会反映定位不了
2017-08-05 11:40
316 查看
关于如何集成高德地图的定位,这里不再说了,高德地图官方文档上已经描述的很详细,这里主要说说,我们测试的时候定位正常,但有部分用户会反映定位不了,如何处理这类情况。
高德地图官方集成文档
关于运行时权限
GitHub地址
减少用户定位失败,需从下面几个方面进行分析:
1、将高德SDK升级到最新版本,首先看下面一组统计,这是通过友盟统计,分析的到每天定位失败的人数。
从折线图中可以明显的发现,从1号开始定位失败的人数明显下降,其中一部分原因是将SDK升级到最新的版本,另一部分原因后面会分析到。
目前高德地图支持远程依赖添加库文件的方法,能自动保持最新的版本。
在build.gradle中添加如下
compile 'com.amap.api:search:latest.integration'
compile 'com.amap.api:location:latest.integration'
2、权限问题导致的定位失败。可能你会有疑问,代码中已经运行时权限申请,为啥还会因为权限导致定位失败。checkSelfPermission检查是否需要获取权限,这个方法,在部分手机上无法判断。用户未授予权限,会返回0已授予权限的状态,
其中手机型号有:HUAWEICAZ-AL10、DOOVA6、H60-L02、PRA-AL00、HUAWEINXT-AL、LON-AL00、VTR-AL00,这里只列举部分机型。
解决方法,我们在高德地图定位回调的时候,进行错误码判断,当错误码返回12或13的时候,自定义一个dial
4000
og,用户确定后跳转到应用设置界面,手动开启权限。
cancelLoadingDialog();
int errorCode = location.getErrorCode();
String errorInfo = location.getErrorInfo();
errorInfo = errorInfo.substring(0, errorInfo.indexOf(" "));
if (errorCode == 12 || errorCode == 13) {//缺少权限的定位,要用户手动打开
showPermissionDialog();
}
3、因环境因素导致的定位失败,错误码为:2、4、6
2为Wifi性能不足;6是定位依据不足,可能有wifi,但是是移动wifi。因为定位是依靠基站+WIFI,获取不到无法计算位置。4是网络异常,这个时候你会好奇,提示网络异常,为啥自己的后台日志还能上传。这是因为,网络是有波动的,定位的时候时候有问题,但是上传的时候网络好了,高德地图那边有以下情况会报4(网络异错误):网络请求过程中异常,类似于unkonow
host,无网络,网络差,请求超时。
4、错误码7,key错误,有些手机概率性获取不到报名,偶尔会报key错误。当然,如果所有的手机都是key错误,那么一定是包名和key不一致。
GitHub地址
高德地图官方集成文档
关于运行时权限
GitHub地址
减少用户定位失败,需从下面几个方面进行分析:
1、将高德SDK升级到最新版本,首先看下面一组统计,这是通过友盟统计,分析的到每天定位失败的人数。
从折线图中可以明显的发现,从1号开始定位失败的人数明显下降,其中一部分原因是将SDK升级到最新的版本,另一部分原因后面会分析到。
目前高德地图支持远程依赖添加库文件的方法,能自动保持最新的版本。
在build.gradle中添加如下
compile 'com.amap.api:search:latest.integration'
compile 'com.amap.api:location:latest.integration'
2、权限问题导致的定位失败。可能你会有疑问,代码中已经运行时权限申请,为啥还会因为权限导致定位失败。checkSelfPermission检查是否需要获取权限,这个方法,在部分手机上无法判断。用户未授予权限,会返回0已授予权限的状态,
其中手机型号有:HUAWEICAZ-AL10、DOOVA6、H60-L02、PRA-AL00、HUAWEINXT-AL、LON-AL00、VTR-AL00,这里只列举部分机型。
解决方法,我们在高德地图定位回调的时候,进行错误码判断,当错误码返回12或13的时候,自定义一个dial
4000
og,用户确定后跳转到应用设置界面,手动开启权限。
cancelLoadingDialog();
int errorCode = location.getErrorCode();
String errorInfo = location.getErrorInfo();
errorInfo = errorInfo.substring(0, errorInfo.indexOf(" "));
if (errorCode == 12 || errorCode == 13) {//缺少权限的定位,要用户手动打开
showPermissionDialog();
}
3、因环境因素导致的定位失败,错误码为:2、4、6
2为Wifi性能不足;6是定位依据不足,可能有wifi,但是是移动wifi。因为定位是依靠基站+WIFI,获取不到无法计算位置。4是网络异常,这个时候你会好奇,提示网络异常,为啥自己的后台日志还能上传。这是因为,网络是有波动的,定位的时候时候有问题,但是上传的时候网络好了,高德地图那边有以下情况会报4(网络异错误):网络请求过程中异常,类似于unkonow
host,无网络,网络差,请求超时。
4、错误码7,key错误,有些手机概率性获取不到报名,偶尔会报key错误。当然,如果所有的手机都是key错误,那么一定是包名和key不一致。
GitHub地址
相关文章推荐
- 判断APP用户手机是否开启了定位服务
- 使用 Eclipse 在 Google App Engine 上创建 mashup,第 3 部分: 使用 RESTful Web 服务
- 解决在iOS8环境下,当用户关闭定位服务总开关时,无法将APP定位子选项加入定位权限列表的问题
- 判断APP用户手机是否开启了定位服务
- 使用SQL Server分析服务定位目标用户
- 使用SQL Server分析服务定位目标用户
- 使用SQL Server分析服务定位目标用户
- 使用SQL Server分析服务定位目标用户
- iOS使用百度地图定位,关掉系统定位服务该怎么提示用户打开
- 解决在iOS8环境下,当用户关闭定位服务总开关时,无法将APP定位子选项加入定位权限列表的问题
- 使用 AJAX 调用SOAP Web 服务,第 2 部分: 扩展 Web 服务客户机
- 使用服务组件体系结构构建 SOA 解决方案——第 1 部分
- 使用 OpenSSL API 进行安全编程,第 3 部分: 提供安全--服务
- 使用 Rational Software Architect 设计 SOA 服务,第 1 部分: 需求、过程与建模入门
- 在ASP.NET AJAX中使用应用程序服务和本地化(2):示例程序:实现用户登录和注销
- 在ASP.NET AJAX中使用应用程序服务和本地化(3):用户个性化组件ProfileService
- 在ASP.NET AJAX中使用应用程序服务和本地化(4):示例程序:读取、修改并保存用户个性化信息
- C#中使用异步Socket编程实现TCP网络服务的CS的通讯构架(一)----基础类库部分
- Google Analytics重新向注册用户发送使用免费服务邀请
- 使用开放源代码框架的 Java 应用程序的 Web 服务集成模式,第 2 部分: 实现接收模式