Advertisement

手把手教你集成Andriod百度地图SDK

阅读量:

百度地图Android SDK是一套应用于Android 4.0及以上版本的地图能力应用程序接口,开发者可以轻松、快捷地在自己的Android应用中集成。目前已经应用于网约车,共享出行,外卖,快递物流等众多行业。

功能包括:地图展示 (普通地图、卫星图、路况图、热力图、室内图、个性化地图)与地图交互 (手势交互、控件交互、方法交互) 在地图上绘制 (标记点、绘制线、绘制面、绘制Overlay等)检索地图数据 (检索POI、公交信息检索、地理编码检索、行政区域检索等)路线规划 (步行路线规划、骑行路线规划、驾车路线规划、跨城路线规划、公交路线规划)等功能。

Step 1 注册和获取密钥(AK)

用户在使用SDK之前需要获取百度地图移动版开发密钥(AK),该AK与百度账户相关联。 开发者必须先有百度帐户,才能获得AK。并且,该AK与引用SDK的程序包名有关,具体流程请参照申请密钥。请妥善保存AK,地图初始化时需要用到AK。创建好的AK会永久保存在控制台。

获取安全码

申请密钥开发需知:

安全码的组成规则为:Android签名证书的SHA1值+packagena

同一个AK中,可以填写开发版SHA1和发布版SHA1,这样App从开发、测试到发布整个过程中均不需要改动AK。

此功能完全兼容以前的AK,默认将原有的SHA1放在发布版SHA1上,开发者也可自己更新,将原有的开发版本的AK和发布版本的AK对应的SHA1值合并后使用。

调试版本(debug)和发布版本(release)下的SHA1值是不同的,发布apk时需要根据发布apk对应的keystore重新配置Key。

获取SHA1值

获取SHA1因不同的开发工具(Eclipse/Android Studio)不同电脑系统(Windows/Mac)获取的方式也不相同,执行的命令是相同的,在Windows系统下或者Eclipse开发工具下请参考官网的获取方式(点击文章下方阅读原文),以下使用的是mac系统studio开发工具,获取调试版SHA1值为列。

(1) 打开终端工具:输入cd .android,定位到.android文件夹下

(2)调试版本使用 debug.keystore,命令为:keytool -list -v -keystore debug.keystore

发布版本使用apk对应的 keystore,命令为:keytool -list -v -keystore apk的keystore

(3)提示输入密钥库密码,调试版本默认密码是: android,发布模式的密码是为apk的keystore设置的密码。输入密钥后回车(如果没设置密码,可直接回车),此时可在控制台显示的信息中获取SHA1值,如下图所示:

获取包名

Android应用获取包名packagename,根据开发工具不同,获取位置有所不同,Eclipse请参考官网获取方式(点击文章下方阅读原文),以下使用Android Studio获取

开发包名需要在文件build.gradle中查询applicationId,并确保applicationId与在AndroidManifest.xml中定义的包名一致 在文件build.gradle中查询applicationId,方法如图:

注意:使用Android Studio开发,如遇到applicationId与在AndroidManifest.xml中定义的包名不一致的情况,以appclicationid为准。

完成以上步骤点击确定可获取到AK值如图所示:

申请完AK以后接下来就需要在AndroidManifest.xml文件中的application中配置AK如图所示:

复制代码

<meta-data

android:name="com.baidu.lbsapi.API_KEY"

android:value="开发者 key" />

Step 2 下载百度地图SDK

下载地图SDK有两种方式

一键下载(下载所有百度地图SDK功能)

自定义下载(结合自身需求、自定义选择业务功能,打包下载所选功能开发包)

自定义下载完成后的文件格式

(1) BaiduLAB_Android.jar文件就是包含了所需要的所有功能的jar包。

(2) armeabi等文件夹里就是针对不同手机CPU架构的.so文件。

Step 3 Android Studio工程配置

添加jar包

将下载的地图SDK的jar包复制到工程的libs目录下,如图所示

方法一:

工程配置还需要把jar包集成到自己的工程中,如上图所示,放入libs目录下。对于每个jar文件,右键-选择Add As Library,导入到工程中。同时在build.gradle中会生成工程所依赖的对应的jar文件说明,代码如下所示:

复制代码

dependencies{

compile files('libs/BaiduLBS_Android.jar')

}

方法二:

1)菜单栏选择 File —>Project Structure。

2)在弹出的Project Structure对话框中, 选择左侧列表module的app, 然后点击Dependencies选项卡。

3)点击绿色的加号选择Jar dependency然后选择要添加的jar包即可完成上边的操作,完成后在APP目录下的build.gradle文件中,会有引入的类库,如上述代码所示。

添加so库

现在Android兼容 5 种CPU架构: armeabi、armeabi-v7a、arm64-v8a、x86、x86_64。开发者可根据实际使用需求,放置所需.so到对应的工程文件夹内。

方法一:

使用默认配置,不需要修改build.gradle,在src/main/目录下新建jniLibs目录,工程会自动加载src目录下的.so动态库,如果已有这个目录,可以直接将.so文件拷贝到对应的架构下,如下图目录结构所示。

方法二:

使用自定义配置,但这样工程并不会自动加载libs下的.so,需说明.so的路径为该libs路径,关联所有地图SDK的.so文件,即在APP文件夹下的bulid.gradle加入代码。

(1) 将下载文件的armeabi文件夹复制到libs目录。

(2) 打开build.gradle,找到sourceSets标签,在里面增加一项配置,如图所示:

复制代码

sourceSets {

main {

jniLibs.srcDir 'libs'

}

}

添加所需权限

使用地图SDK之前,需要在AndroidManifest.xml 文件中进行相关权限设置,确保地图功能可以正常使用。

注意: 权限应添加在appliction之外,如添加到appliction内部,会导致无法访问网络,不显示地图。

复制代码

//获取设备网络状态,禁用后无法获取网络状态

//网络权限,当禁用后,无法进行检索等相关业务

//读取设备硬件信息,统计数据

//读取系统信息,包含系统版本等信息,用作统计

//获取设备的网络状态,鉴权所需网络代理

//允许sd卡写权限,需写入地图数据,禁用后无法显示地图

//获取统计数据

//鉴权所需该权限获取进程列表

//使用步行AR导航,配置Camera权限

配置AK

在AndroidManifest.xml的application中添加开发密钥AK。如果还没有获取AK,请按照Step1流程来获取。

复制代码

<meta-data

android:name="com.baidu.lbsapi.API_KEY"

android:value="开发者 key" />

Step 4 Hello BaiduMap

显示基础地图

百度地图SDK支持两种地图组件分别是MapView和TextureMapView,是Android View类的子类,MapView和TextureMapView都是地图容器。用这两种加载地图的方法与Android提供的其他View 一样,用于在Android View中放置地图。两个地图组件的使用方法是一样的,具体的使用步骤如下:

在布局xml文件中添加地图控件;

复制代码

<com.baidu.mapapi.map.MapView

android:id="@+id/bmapView"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:clickable="true" />

在应用程序创建时初始化SDK引用的Context全局变量;

注意:地图的各个组件功能依赖与SDK的正确初始化,并且为了保证整个APP的生命周期里地图SDK都存活、功能可用,我们建议该方法在APP的Applcaition派生类的onCreate方法中调用。

复制代码

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//在使用SDK各组件之前初始化context信息,传入ApplicationContext

//注意该方法要再setContentView方法之前实现

SDKInitializer.initialize(getApplicationContext());

setContentView(R.layout.activity_main);

}

}

创建地图Activity,管理地图生命周期;

复制代码

public class MainActivity extends Activity {

private MapView mMapView = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//在使用SDK各组件之前初始化context信息,传入ApplicationContext

//注意该方法要再setContentView方法之前实现

SDKInitializer.initialize(getApplicationContext());

setContentView(R.layout.activity_main);

//获取地图控件引用

mMapView = (MapView) findViewById(R.id.bmapView);

}

@Override

protected void onDestroy() {

super.onDestroy();

//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理

mMapView.onDestroy();

}

@Override

protected void onResume() {

super.onResume();

//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理

mMapView.onResume();

}

@Override

protected void onPause() {

super.onPause();

//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理

mMapView.onPause();

}

}

`

注:自v4.5.2起,mapview已经可以完美替代textureMapview,且性能更好。textureMapview当前版本仍会保留,但不建议使用。

如果使用TextureView渲染(使用前提:Android 4.0以上系统,并开启强制GPU渲染)。

完成以上步骤就可以在你的APP中显示出地图。

---------常见错误---------

鉴权错误码230:我们对Mobile类型(Android/IOS)的服务请求进行了安全码校验;所谓安全码即开发者在API控制台申请AK(AK和APP一一对应)时提供的APP签名的SHA1+”;”+包名;请求服务必须要携带该安全码作为参数,不携带或者携带不一致的安全码给服务端,均会返回230错误。当出现230错误时。解决办法:请开发者先查看一下APP当前签名的SHA1值(注意不是MD5)和包名,然后去API控制台把查看该AK对应配置的安全码是否和APP实际的一致,如果不一致请去API控制台手动修改一致即可。

错误码-11:如果遇到错误码是errorcode: -11 uid: -1 appid -1 msg: httpsPost failed; 这种情况下是由系统的时间不是当前时间造成的,解决办法:把时间修改成自动获取时间和日期,也就是使用网络提供的时间。

错误码-10:如果遇到错误码是errorcode: -10 uid: -1 appid -1 msg: Current network is not available;(1)这种情况下一般都是由网络原因造成的鉴权失败,解决办法:检查网络是不是正常。(2)网络正常,还是出现这种情况,请打开浏览器排查下能不能正常访问https请求的地址,如不能正常访问则说明您的https安全证书到期,需要网站所有者到https安全证书签发机构CA续签证书。

错误码-1:如果遇到错误码是errorcode: -1 uid: -1 appid -1 msg: Exception:java.security.cert.CertPathValidatorException: Trust anchor for certification path not found;这种情况下是由https证书过期造成的,解决办法:请打开浏览器排查下能不能正常访问https请求的地址,如不能正常访问则说明您的https安全证书到期,需要网站所有者到https安全证书签发机构CA续签证书。

错误码-200:如果遇到错误码是errorcode: 200 uid: -1 appid -1 msg: APP不存在;这种情况一般都是AndroidManifest.xml文件中key没有填写正确。解决办法:请仔细核对AndroidManifest.xml的key和控制台的key是否一致,检查AndroidManifest.xml中填写key时是否有空格存在。

错误:NativeLoader: found libBaiduMapSDK_map_v5_1_0.so error 这种情况是因为缺少.so文件。解决办法:请按照官网开发引导去配置,也可以参考官网中的demo进行配置。

错误:NativeLoader: loadException; NativeLoader: BaiduMapSDK_base_v5_1_0 Failed to load. 这种情况是so库加载失败,禁止不同架构下的.so文件串用。解决办法:请保证.so文件是在对应的架构文件夹下。

全部评论 (0)

还没有任何评论哟~