Monthly Archives: August 2013

百度地图Android SDK无法定位的解决办法

最近在使用百度地图安卓API的时候发现一个问题,有一段定位的代码无法进行定位。这个问题很奇怪,因为在整个应用的其它部分也有调用定位的代码,都能够成功定位,但是惟独这里不行。

先简单介绍一下程序的设计,我们在界面上有一个按钮用于选择位置,点击按钮后会弹出一个对话框选择是在地图上选点还是自动定位当前位置,如果点了定位当前位置就会自动进行定位。

经过反复检查之后才发现问题的所在:传入定位函数参数的Context对象有问题。一般来说这种情况下我们都会把含有按钮的Activity作为Context对象参数传入,很不幸在弹出对话框之后,这个Context就已经失效了,所以百度地图才会无法定位。

解决的方法也很简单,直接传入全局Context即可,例如getApplicationContext()。

Android百度地图SDK开发出现Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/baidu/mapapi/BMapManager 错误

之前和同学一起做Android的地图应用开发,用到了百度地图的SDK。但是很奇怪的事情是,在同学的电脑上一切正常,但是在我的电脑上死活就跑不起来,显示

Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/baidu/mapapi/BMapManager

这实在是太诡异了。由于我们使用的Eclipse版本不同,我用的是ADT 22,他用的是更早的,我一度怀疑是IDE的问题,然而按照百度官方文档修改项目配置后,依然报同样的异常。

为了解决这个问题,我上网搜索资料,http://longquan.iteye.com/blog/1583167 这篇文章给了我启发。我开始一样一样检查问题的原因,最后惊讶的发现armeabi文件夹下竟然缺少so文件!

这是怎么回事?为什么我的同学能正常运行呢?仔细检查之后我才发现是SVN惹的祸,我们的so文件压根就没有出现在版本库中,之所以会这样因为*.so文件是SVN客户端默认忽略的文件类型。

知道了原因接下来就好办了,在SVN的setting中取消so文件类型的忽略,然后重新commit和update一次,就成功运行了!