设置定位模式
百度定位设置定位模式的时候使用了高精度定位模式LocationMode.Device_Sensors
LocationClientOption option = new LocationClientOption()
option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);
option.setScanSpan(0);//设置0:单次定位
mOption.setCoorType("bd09ll");
复制代码
问题
定位间隔设置为0,表明只回调一次,但是打印结果返回了两次数据:
D/DebugLog: ⇢ startLocation()
D/DebugLog: ⇠ startLocation [28ms]
D/DebugLog: ⇢ onReceiveLocation(bdLocation=&loctype=161&lat=32.001415&lon=118.749307&radius=43.813316&biasprob=-1.0)
D/DebugLog: ⇠ onReceiveLocation [0ms]
D/DebugLog: ⇢ onReceiveLocation(bdLocation=&loctype=61&lat=32.001381&lon=118.74885&radius=15.0&biasprob=-1.0)
D/DebugLog: ⇠ onReceiveLocation [12ms]
复制代码
尝试了在BDAbstractLocationListener
回调中执行停止定位,并注销监听
locationClient.stop();
locationClient.unRegisterLocationListener(listener);`
复制代码
再次编译后启动,还是发现会回调两次。
后查看打印的数据发现,两次结果有些不同,两次结果的定位模式不一样,分别是loctype=161
和loctype=61
分别对应了定位类型中的BDLocation.TypeNetWorkLocation
和BDLocation.TypeGpsLocation
,
其定位精度也有差别,可以在打印的结果中看到。
解决方案
可以对两次定位结果二选一,要求快速定位的可以选BDLocation.TypeNetWorkLocation
,要精确度高的可以选BDLocation.TypeGpsLocation
DialogHelper.doBeforeAsk(getAttachActivity(), "一键报警", "你确定需要发送报警吗", dialog -> {
showDialog("正在获取定位中,请稍后...");
startLocation(new BDAbstractLocationListener() {
@DebugLog
@Override
public void onReceiveLocation(BDLocation bdLocation) {
if (bdLocation.getLocType() != BDLocation.TypeGpsLocation) {
//确保只获取一次定位
return;
}
double latitude = bdLocation.getLatitude();
double longitude = bdLocation.getLongitude();
String jwd = longitude + "," + latitude;
``````
复制代码
另一个问题
使用百度定位中的围栏功能,发现围栏接口获取的点位始终和自己传给百度定位的数据发生偏移,不知道有人知道如何解决吗。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END