为提高问题排查效率, 尽量提供以下基本信息
获取本地日志方法
TencentLocationManagerOptions.setDebuggable(true);
TencentLocationManager 获取实例前调用关于 DeviceID 和定位请求日志
调用 TencentLocationManager 中的 setDeviceID 方法, 传入一个 ID, 方便后面排查问题. 如果还未设置, 请现在开始, 设置一下
public void setDeviceID(Context context, String deviceID);
DeviceID 有 3 个注意点:
关于本地日志和定位请求日志
关于GNSS
全球导航卫星系统 (GNSS) 是一个总称: 主要包含 4 个系统, 即中国的北斗卫星导航系统(BDS或Beidou), 美国全球定位系统 (GPS), 俄罗斯格洛纳斯系统 (GLONASS) 以及欧盟伽利略系统 (Galileo).
由于GPS 是最早被广泛认知和应用的卫星导航系统, 大家常用 GPS 指代 GNSS. 但 GPS 本质只是 GNSS 的一种, 需要根据语境自行判断.
SDK 是使用系统的 GNSS 接口, 请求的卫星定位结果, 系统会融合手机可用的导航卫星系统的信息, 给出一个综合的 GNSS 定位点.
关于定位原理
简述一下定位的原理: 开启定位后, SDK 会收集手机连接的 WiFi 信息, 周围 WiFi 列表信息, 周围基站信息等, 将他们发送给腾讯后台定位服务, 获取网络定位点和省市区等信息(由 RequestLevel 决定)
开启定位后, 也会获取通过系统的 GNSS 接口获取 GNSS 定位点
最后, 将网络定位点, 省市区信息, GNSS 定位点信息(如果有的话), 通过一定的策略融合, 赋值给 TencentLocation 中, 返回给开发者.
北斗定位原理: 基于腾讯全自研的卫星解算、差分定位、网络定位和传感器推算等多源融合定位能力. 北斗科普链接
首先, 通过 location 的 getSourceProvider 方法, 确定该飘点的定位类型:
常见原因:
然后, 提供信息用于排查
插卡
打开手机 WiFi 开关
打开手机 WiFi 扫描开关 (设置 App 里)
单次定位时, 默认的 request 配置, 会返回网络点. 使用 request.setGpsFirst(true) 会等待 GPS 点, 默认等待 5s. 5s 内有 GPS 点, 返回该 GPS 点; 5s 后还没有 GPS 点, 则返回网络点.
必须使用连续定位, 连续进行单次定位不会有相关事件的回调.
推荐使用圆形围栏, 并根据业务需求选择合适的半径.
手机定位开关关闭了, 需要打开
手机当时没有搜索到基站信息并且没有 WiFi 列表信息
排查一下 App 被授予的权限(注意: 不是代码里请求的权限, 而是被用户同意的权限)
看是 request.setGpsFirst(true) 是否传入的是 true. 详见 “2.2 提高单次定位精度”
request.getExtras().putString("LOCATION_URL_IOT","true");北斗库仅支持 Android 7 以及以上的的系统.
目前没有仅北斗模式 设置了 GNSS_SOURCE_BEIDOU_FIRST, 在有北斗信号的是时候会给北斗的点, 没有则会给 GNSS 的点, 也就是说一次连续定位中, 可能会有北斗和其他 GNSS 的点, 如只需要北斗的点, 自行通过 getProvider 方法过滤掉 GPS 即可
没有北斗的点, 排查以下情况
TencentLocationManagerOptions.setExtraKey("您的 key"); 传入的 key 是否完整TencentLocationRequest request = TencentLocationRequest.create();
requeset.setGnssSource(TencentLocationRequest.GNSS_SOURCE_BEIDOU_FIRST);
RequestLevel 设置为 REQUEST_LEVEL_POI 可获取当前位置的 POI 列表, 该列表不支持指定个数, 不支持翻页.
如需更高级的 POI 服务, 可以参考使用 WebService API
需要调用 TencentLocationManager.setUserAgreePrivacy(true);
需要设置正确的 key (二选一):
TencentLocationManagerOptions.setKey("您申请的Key")
<application>
...
<meta-data android:name="TencentMapSDK" android:value="您申请的Key" />
</application>
断点调试, TencentLocationManager.getInstance() 是否获取到了 TencentLocationManager 的实例
当定位失败时, 会使用系统的 nlp (network location provider) 提供的缓存点
目前无法排查国外定位的相关问题. 国外定位只有经纬度信息, 没有逆地址信息
仅在支持的大型商场和交通枢纽支持, 具体地点是否支持, 找位置小助手咨询
SDK 提供 2 个方向值
通过 request 配置开启: request.setIndoorLocationMode(true)
开启室内定位模式后, 会提高 WiFi 扫描频率, 默认是30s 一次. 需要注意的是:
导航 SDK 中封装了定位 SDK, 并提供部分定位能力. 所有接口查看导航 SDK 的文档, 定位 SDK 的文档不适用
一般是有意或无意添加了多个 listener 导致的, 停止接口传入 null 才会清除所有 provider 和 listeners, 从而彻底停止定位
而上架检测一般是在后台时, APP 仍获取基站等信息, 造成审核不通过. 所以建议监听 app 进入后台事件, 然后在进入后台前调用下面的方法彻底关闭定位
mLocationManager.removeUpdates(null);
如果仍然上架失败, 打开本地日志, 尽量重复一下上架的操作, 提供本地日志来分析
获得定位 SDK 的商业授权后, 无配额限制, 无 QPS 限制. 从定位 SDK 获取逆地址信息不会消耗 WebService API 的配额
有帮助
没帮助