百度定位开发onReceiveLocation回调两次

本文探讨了百度定位SDK在特定版本中出现的双回调现象,即onReceiveLocation方法被调用两次的问题,并提供了相应的解决方案。通过对SDK行为的分析,作者建议采用布尔标志来确保回调逻辑仅执行一次,以避免不必要的重复操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public void startLoaction(final BDLocationListener locationListener) {
mLocClient = new LocationClient(mContext.getApplicationContext());
        mLocClient.registerLocationListener(new BDLocationListener() {
            @Override
            public void onReceiveLocation(BDLocation bdLocation) {
                locationTip(bdLocation);// 调用了2次
                locationListener.onReceiveLocation(bdLocation);
            }
        });
        LocationClientOption option = new LocationClientOption();
        option.disableCache(true);//禁止启用缓存定位
        option.setOpenGps(true);// 打开GPS
        option.setCoorType("bd09ll"); // 设置坐标类型
        option.setPriority(LocationClientOption.GpsFirst);
        // 设置网络优先(不设置,默认是gps优先)
        option.setIsNeedLocationPoiList(true);
        option.setIsNeedAddress(true);
// 返回的定位结果包含地址信息
        option.setAddrType("all");
        int scanTime = KeyConstant.locationScan;
        Logger.e("定位的时间间隔",scanTime+"");
        option.setScanSpan(scanTime);// 设置发起定位请求的间隔时间为5s(小于1秒则一次定位)
        mLocClient.setLocOption(option);

        if(!mLocClient.isStarted()){
            mLocClient.start();
        }}

onReceiveLocation会回调两次,避免方法使用最新的百度SDK,在5.1版本时百度首次定位会触发这样的逻辑,只是为了加速首次定位的速度。解决办法在回调后stop()。但是百度并不建议直接stop(),所以说最好的方法还是自己写一个boolean值进行判读,onReceiveLocation调用一次时候就将boolean改变。从而保证了onReceiveLocation内信息只走了一次。http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=109126&extra=page%3D1

转载于:https://my.oschina.net/chenxinyu/blog/744339

百度地图定位持续回调的问题可能由多种原因引起。以下是一些常见的原因及解决方法: 1. **权限问题**: - 确保应用已获得必要的权限,如访问位置信息的权限。在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> ``` - 在运行时动态请求权限。 2. **定位模式设置**: - 确保定位模式设置为高精度模式。可以通过以下代码设置: ```java LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); mLocationClient.setLocOption(option); ``` 3. **回调函数实现**: - 确保已经正确实现BDLocationListener接口,并在onReceiveLocation方法中处理定位结果。 ```java public class MyLocationListener extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation location) { // 处理定位结果 } } ``` 4. **启动定位**: - 确保已经启动定位服务。 ```java mLocationClient.start(); ``` 5. **网络连接**: - 确保设备有网络连接,因为定位服务需要网络支持。 6. **生命周期管理**: - 确保在适当的生命周期方法中启动和停止定位服务。例如,在onStart中启动,在onStop中停止。 ```java @Override protected void onStart() { super.onStart(); mLocationClient.start(); } @Override protected void onStop() { super.onStop(); mLocationClient.stop(); } ``` 7. **日志和调试**: - 使用日志输出调试信息,检查定位服务是否正常工作。 ```java Log.d("Location", "onReceiveLocation: " + location.getLatitude() + ", " + location.getLongitude()); ``` 通过以上步骤,可以排查并解决百度地图定位持续回调的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值