Android基于位置的服务小项目使用百度LBS SDK遇见的一系列问题及解决方法

版权声明:支持原创,注明出处。 https://blog.csdn.net/qq_38584967/article/details/78698765

下面是学习郭霖前辈的第一行代码第二版11.3时使用百度定位遇见的一些问题,下面做一下我个人的总结:

第一个问题定位的时候刷新一次纬度和经线就出问题了,如下:
这里写图片描述
遇见这个问题起初没觉得什么,以为只是因为在室内。直到我遇见了第二个问题,显示不出地图啦!
这里写图片描述

可能错误有:

1.你在百度开发页面创建应用中,申请应用AK时填入的包名有可能不对应,应该和你项目的包名一样,如我的是com.example.lbstestdemo,申请的时候要一致,引用百度配置方法的教程一句话:包名需要在文件build.gradle中查询 applicationId,并确保 applicationId 与在 AndroidManifest.xml 中定义的包名一致,然后这就是你要的名字。

2.申请AK时填写的SHA1问题,我按书上操作并没有问题,但是也提一下可以参考http://blog.csdn.net/stevenhu_223/article/details/38333611
密钥库口令好像默认为android

3.讲一讲我自己的问题吧,马虎大意。我申请到AK之后直接一拉ctrl+c ctrl+v,然后多了空格!粗心大意的我完全没有在意android:value=” GhpWtReOZFGbLxN7cFMGnTi68jGPrPvr “,后面把空格一删完全没毛病老铁.

最后成功图片
这里写图片描述
方便测试刷新在后面加了一个刷新次数,图片为第6次刷新时。

当我设置为只通过传感器定位(option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors))时结果如下
这里写图片描述
由于获取地址信息一定需要用到网络,即便传感器模式只会使用GPS定位也会开启网络定位功能。我的理解是第一次使用的是网络定位得到信息,然后才一直为GPS定位,然后我在室内搜索不到GPS,即使每5秒刷新,但得不到位置信息,也就一直不会返回定位结果,onReceiveLocation方法得不到执行,界面没有更新,于是刷新次数显示在第一次使用网络时的值为1(但其实还在刷新只是没有在界面显示出来)。同理我打开app之前先把数据关闭,那第一次的网络定位也是无法得到定位结果的,即不产生回调,那界面将空白一片。

最后显示地图的效果,待会去继续学习定位地图位置。
这里写图片描述


继续学习地图定位到我的位置,下面是遇见的问题:

1,定位无效,显示的还是默认的地图。
运行了N次,结果依旧如上一张图片,我绝望的看着天安门广场。

            LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude());
                        MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
            baiduMap.animateMapStatus(update);
            update = MapStatusUpdateFactory.zoomTo(16f);
            baiduMap.animateMapStatus(update);//以动画方式更新

地图就是不跳到我的位置,可是又看到地图的确是放大了的,即MapStatusUpdateFactory.zoomTo(16f),也就是说语句都正确执行了。
这里写图片描述

为什么会这样,现在来小小的改动一下代码

            LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude());
            MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
            baiduMap.setMapStatus(update);
            update = MapStatusUpdateFactory.zoomTo(16f);
            baiduMap.setMapStatus(update);//不以动画方式更新

问题迎刃而解,成功得到想要的结果。问题就在于baiduMap.animateMapStatus(update)和baiduMap.setMapStatus(update)方法的使用,animateMapStatus的功能是以动画方式改变地图状态,在地图还没显示时,不可能运行动画。

这里写图片描述

对于我原来的代码一共改变了两次地图状态,放大地图和定位,所以不可能同时演示出动画效果,并且后执行的放大地图的动画覆盖了前面定位的动画,所以我只能看到放大后的北京。你可以尝试将它们俩代码的位置反过来,然后你就只能看到自己的位置但看不到缩放级别为16的地图了。只有在地图显示完才能在地图上显示效果,当然你可以写出下面规范一些的代码

            LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude());
            MapStatus newMapStatus = new MapStatus.Builder().target(ll).zoom(16f).build();
            MapStatusUpdate update = MapStatusUpdateFactory.newMapStatus(newMapStatus);
            baiduMap.animateMapStatus(update);

使用Builder将我要改变的东西放到一块,我只改变一次地图状态,哈哈,现在就可以在已经有的北京上面以动画方式改变地图状态啦。

2.有的人可能遇到的问题一样,可是运行的结果却不同了,但是应该都只是baiduMap.animateMapStatus(update)的问题,你可以尝试着:
1)多更新几次地图,在书上设置了isFirstLocate来限制整个过程更新一次地图,你可以把它isFirstLocate = false注释掉观察。
2)直接使用baiduMap.setMapStatus(update)方法,那应该没有任何其他问题了

            LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude());
            MapStatus newMapStatus = new MapStatus.Builder().target(ll).zoom(16f).build();
            MapStatusUpdate update = MapStatusUpdateFactory.newMapStatus(newMapStatus);
            baiduMap.setMapStatus(update);

我遇到的问题归根结底就是以动画方式更新地图导致的问题,只要注意好这样更新可能遇见的问题就好了,就像郭霖大神说的,百度LBS SDK未来随时都可能更新,或许更新后这个例子就无法正常运行了,所以自己查阅官方文档或者搜索资料是非常重要的。
有些问题自己再思考思考或许就出来结果啦

本博客可能有一些个人推断在里面,如有问题请留言,相互学习。当然没人看到就算了,haha。

完整项目需要的话请前往我的Github地址(写个博客也挺花时间的,所以请求给我Github上的这个项目一个star,蟹蟹蟹蟹啦)https://github.com/jianhaojiang/LBSTestDemo.git
参考的一些链接:
http://blog.csdn.net/crazy1235/article/details/43898451
http://blog.csdn.net/qiuyejingmei20/article/details/39935013
http://blog.csdn.net/csu54zzg/article/details/40305029

猜你喜欢

转载自blog.csdn.net/qq_38584967/article/details/78698765