最近想实现一个打卡的功能,想到可以利用百度地图的SDK。网上有很多关于百度地图SDK定位、地图功能应用的demo,这部分倒不是很困难。但网上很多博客写的内容一般都着重于代码部分,很多下载配置和编译器设置的过程没有涉及,官方的文档也基本没有这类的介绍。这篇博文就主要记录一下遇到的非代码部分的坑,虽然大多数问题都被博学的网友解决了,但统一整理一下,可以让之后想简单使用百度SDK的朋友少花点时间。
下载SDK至libs
在百度地图SDK的网站上选择自己需要的功能下载。
然后照常放进libs中,并且添加依赖。
但这样编译运行后会跳出found libBaiduMapSDK_base_vx_x_x.so error的错误,我看了看.so文件都在libs里呀,那是为什么呢?
查阅后发现需要在app:build.gradle里添加这样几行。
sourceSets{
main{
jniLibs.srcDir 'libs'
//说明so的路径为该libs路径,关联所有地图SDK的so文件
}
}
申请密钥
百度地图SDK为了防止被恶意攻击,需要开发者申请密钥使用。但好在申请过程很简单并且免费,同时可以申请多个。
申请密钥时需要提供SHA1和包名,SHA1是安全哈希算法,应用于数字签名。包名就是APP的包名,如果多个APP要使用,就需要申请多个密钥,但在同一台计算机上编译运行,SHA1似乎都是一样的。AndroidStudio可以通过如图的操作查看SHA1,很方便。
随后将获得的密钥填入AndroidManifest中。
申请权限
做完以上配置后,准备试着运行一下网上找到的代码demo。
(我这里参考的是https://blog.csdn.net/csdn_aiyang/article/details/80407123)
发现可以显示地图,但是没有定位功能,遂想到是不是跟定位有关的权限没有申请,随后查阅了一下百度地图SDK所需要的权限,在AndroidManifest中填写了以下权限申请。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
其中,
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
是跟定位有关的权限,很多网上的博文不知道为啥没有涉及。
但添加以后发现还是没有定位功能,查阅资料后发现,Android6.0以后版本很多权限需要动态申请,我测试的手机就是MIUI6+,很坑。按照https://www.jianshu.com/p/dea56f6d7af3介绍的方法一步步做好后就大功告成了,这里就不复制黏贴了,原博主介绍的很专业详细。