阅读 164
百度定位,单次定位回调两次的问题

百度定位,单次定位回调两次的问题

设置定位模式

百度定位设置定位模式的时候使用了高精度定位模式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=161loctype=61

分别对应了定位类型中的BDLocation.TypeNetWorkLocationBDLocation.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;
                    ``````
复制代码

另一个问题

使用百度定位中的围栏功能,发现围栏接口获取的点位始终和自己传给百度定位的数据发生偏移,不知道有人知道如何解决吗。

文章分类
Android
文章标签