百度定位在国内还是数一数二的,相比一年前第一次上手他们家的sdk,感觉友好了不少。当年做龙哥守护app,给人家女朋友装的监控软件。OMG想起来也有点恐怖。
最近有很多空闲的时间,于是又搞起了定位sdk玩玩。
遇坑一:
集成版本的sdk和独立定位的sdk需要的写法不一致,集成版本的不需要添加service。 而独立包的定位sdk,是要加上的。这导致我和同事的包不一致,她那边没有写,我这边写了。因为某种原因,不能定位,后面我会说到。导致再对比和她能跑起来正常定位的时候只发现了此处不相同。然后实际上本该就是不相同的。
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote"></service>
遇坑二:
注意,百度定位sdk一定会让你按照你的包名生成一个key。但是官方文档之说了要key,并没有告诉你key生成在哪个位置。这点非常坑,给差评。人家高德地图就人性化很多,看样子他们写教程文档的人,和做key生成的人不是同一个,并且没有考虑这一点。实际这个key就是你填完包名和各种信息保存后再控制台上的{访问应用(AK)} 这个字段。 AK难道是applicationKey的缩写???差评
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="KEY**********************" />
遇坑三:
<meta-data 在androidManifest中一定要写在application标签中。前面有提到遇到的无法定位并崩溃的原因就在此处。他们的提示也非常不友好。就抛了一个nullpoint。然后jar中的代码又进行了混淆导致你看到的异常是这样的。
java.lang.NullPointerException
at com.baidu.location.h.a.b(Unknown Source)
at com.baidu.location.a.d$b.a(Unknown Source)
at com.baidu.location.h.k.run(Unknown Source)
心中有一万匹草泥马在呼啸而过,这空指针抛成这样。文档中并未详细要求meta-data标签要卸载application中。当我换尽各种姿势后,最终去找demo对比到了此处不同引起的。
遇坑四:
前面第一个坑非常恶心,由于和同事对比的时候她发现我多了一段service。将其注释掉后奇迹般的没有崩溃了。但是 ····但是定位的回掉方法压根就不执行了。
总结:
一定要先看demo。配合文档一起。千万不要照着文档敲了,他们家的东西靠不住。感情文档不是开发写出来的一样。