美文网首页
老版本百度地图只能定位一次的问题

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

作者: 笨鱼天阳 | 来源:发表于2023-02-07 10:38 被阅读0次

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

    前言

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

    描述

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

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

    代码如下:

        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不同。

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

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/btntkdtx.html