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

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

作者: 笨鱼天阳 | 来源:发表于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不同。

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

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

相关文章

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

    老版本! 超级的老版本!!! 前言 唉,项目比较老,目前遇到一个百度地图的定位问题。 描述 每次发起定位的时候,通...

  • Flutter 获取定位

    由于众所周知的原因,国内无法使用location提供的谷歌定位服务,所以只能使用百度地图或者高德地图提供的定位服务...

  • Flutter接入百度地图

    由于众所周知的原因,国内无法使用location提供的谷歌定位服务,所以只能使用百度地图或者高德地图提供的定位服务...

  • 关于Android studio中遇到Library has b

    今天在神坑百度地图版本问题上又踩到了一个坑。由于原先公司某个老项目中百度地图停留在两三年前某个老版版本,今年又翻出...

  • 8.25兄弟会

    js调用百度地图api实现定位 百度地图的API,接口很丰富,实现定位功能 // 百度地图API功能 varmap...

  • android 百度地图的一个坑

    问题:在三星,4.1版本的手机上,百度地图定位失败 解决方法:手机时间设置,使用网络时间要设置

  • 025-Python for Mac

    上一篇:024-地图系列04-iOS百度地图定位集成 一、下载资源 Mac自带2.7版本,这里装的是3.X版本。 ...

  • Xcode10百度地图解决 stdc++.6.0.9问题

    升级Xcode是之后百度地图出现问题工程报错stdc++.6.0.9,不要升级百度地图的最新版本,因为百度地图的最...

  • 高德地图6.8.0定位修改的修复方法

    高德地图6.8.0或以上版本开启后台定位 问题 如果APP中使用了高德地图并且具有后台定位功能,然后在3D地图升级...

  • H5-12.19拖拽事件及百度地图API

    一、 Geolocation(定位) 二、 百度地图 引用百度地图api 密钥获取:首先进入百度地图 点击进入地图...

网友评论

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

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