老版本百度地图只能定位一次的问题

老版本! 超级的老版本!!!

前言

唉,项目比较老,目前遇到一个百度地图的定位问题。

描述

每次发起定位的时候,通过授权后可成功定位到位置。
但是再次定位的时候,就无法定位了。

排除:授权,排除各种校验。

代码如下:

    private LocationClient mLocationClient;

    //获取地理位置
    public static void initLocation(final Context context, final OnLocationListener listener) {
        if (mLocationClient == null) {
            mLocationClient = new LocationClient(context);
        }
        mLocationClient.registerLocationListener(new BDLocationListener() {

            @Override
            public void onReceiveLocation(BDLocation location) {
                //Receive Location
                /** 这里省略很多业务逻辑 **/
                mLocationClient.unRegisterLocationListener(this);
                mLocationClient.stop();
            }
        });
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        option.setOpenGps(true);
        option.setIsNeedAddress(true);
        option.setTimeOut(12000);//设置超时时间
        option.setCoorType("bd09ll");
//        option.setIsNeedLocationPoiList(true);
//        option.setEnableSimulateGps(true);
//        option.setScanSpan(3000);
        mLocationClient.setLocOption(option);
        mLocationClient.start();
    }

解决方式

对比官网的demo后,发现一个地方不同。
官网使用的是 applicationContext
而这里我查代码发现,项目传过来的是个 Activity.
换成下面的代码,就成了。

为啥? 我也不知道。慢慢看吧。

        if (mLocationClient == null) {
            mLocationClient = new LocationClient(context.getApplicationContext());
        }

问题排查

先问了度娘,反正一顿操作,全没用。

另外需求确实只要求定位一次。所以拿到定位后 stop 也没啥问题。

没办法,再去看看官方文档吧。

然后发现两端有意思的描述。

option.setScanSpan(1000);
//可选,设置发起定位请求的间隔,int类型,单位ms
//如果设置为0,则代表单次定位,即仅定位一次,默认为0
//如果设置非0,需设置1000ms以上才有效

添加个3000的配置,发现能间断定位。所以排除各种校验问题。

继续对比,才发现初始化所用的Context不同。

修改后好了。但是为什么呢?

因为是老版本,只能看混淆的代码。一点点尝试排查。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容