发现最近接手的项目跟百度地图干上了,从2014年的V3.xx版本到现在的最新版,踩了不知道没踩过的多少坑。今天在维护一个2014年的老项目的时候,反馈有一条“指南针不显示,旋转后无法复位”。好吧,由于是老项目,第一个我们考虑的应该是版本问题了。
为什么说要先考虑版本问题呢,因为百度坑啊,百度版本不兼容啊 吧啦吧啦的。。(我这样一直黑百度会不会被百度拉黑呢,我还一直想进大厂呢,哭瞎)。
废话不多说,我把项目拉出来,换上了最新的jar包们,run走起。不出所料果然没反应,有反应我还写这篇文章干啥。
于是在我做过的N个项目里,我又扒出一个正常显示指南针的码田,一行行看了下去,emmmm,去你的看不下去。于是我又产生了一个新的想法,emmmm我TM脑洞还是足够大:会不会是自定义图层层叠导致的遮盖呢?你别说,这玩意想起来还真有点道理。毕竟APP第一次安装后,打开页面是有指南针的,后面退出这个activity以后,再也不会显示了。我想肯定是我经过了各种操作本地缓存了啥或者XXX的,一通什么操作才导致的不显示指南针。对没错肯定是我的问题。QAQ
于是我抽丝剥茧,把整个activity所有方法都注释了以后:
果不其然,还是不行。难道是我注释的不够干净??也不是不可能嘛,人总是要怀疑下自己。这时候根据以往的经验,我意识到了事情有点不对。怎么我以前写的就行呢!这TM不会是玄学问题吧?
新拉出来一个页面,一个个测试。网上关于这些问题说的最多的解决方案也是唯一的解决方案就是:
首先,这个是默认开启的,不需要我们手动开启(很人性化QAQ)。那么为什么还是没显示出来呢?我是不指望看百度源码了
那么,会不会和定位有关系呢?毕竟我之前的项目都是和定位相关。emmm不知道是我没找到还是咋的,百度官方在定位的文档斌没有提到指南针问题。毕竟这不是导航,没有指南针也是无可厚非嘛。
在尝试了N种搭配以后,通过不断打印mBaiduMap.getUiSettings().isCompassEnabled()以后,我发现的确,默认指南针都是开启的,那么我就先把它关掉试试:
这时候依旧没有出现指南针,那么我们就多次尝试嘛:在定位后会不会有骚操作呢?于是我在定位后又写了一遍这个代码。果不其然,并没有任何效果。那么我们再打开试试呢?
诶?真的是骚操作诶,靠腰哦。
注意一点,定位的最后一句,mLocClient.start();不可以去掉,亲测。
总结一句:查阅了之前的代码也是地图和定位相结合,但是并没有发现与setCompassEnabled相关的字段,所以这种坑,想要找到解决方法并不简单。我判断可能是由于地图和定位是两个团队开发?所以里面肯定在某些方面有些冲突不兼容的现象,我们在初始化先关闭指南针,定位以后重新打开就可以正常啦,如果有小伙伴也遇到这个问题,可以尝试一下这个解决方案。