文章来源于:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/introduction
简介
什么是百度地图Android SDK?
百度地图 Android SDK是一套基于Android 2.1及以上版本设备的应用程序接口,您可以通过该接口实现丰富的LBS功能:
地图:提供地图(2D、3D)的展示和缩放、平移、旋转、改变视角等地图操作;
POI检索:可根据关键字,对POI数据进行周边、区域和城市内三种检索;
地理编码:提供地理坐标和地址之间相互转换的能力;
线路规划:支持公交信息查询、公交换乘查询、驾车线路规划和步行路径检索;
覆盖物:提供多种地图覆盖物(自定义标注、几何图形、文字绘制、地形图图层、热力图图层等),满足开发者的各种需求;
定位:采用多种定位模式,使用定位SDK获取位置信息,使用地图SDK我的位置图层进行位置展示;
离线地图:支持使用离线地图,节省用户流量,同时为用户带来更好的地图体验;
调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能。
周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能。
LBS云检索:支持用户检索存储在LBS云内的自有POI数据,并展示;
瓦片图层:支持开发者在地图上添加自有瓦片数据;
特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用;
面向的读者
百度地图SDK是提供给具有一定Android编程经验和了解面向对象概念的读者使用。此外,读者还应该对地图的基本知识有一定的了解。
您在使用中遇到任何问题,都可以通过API论坛反馈给我们。
获取定制的百度地图SDK
开发者可在百度地图Android SDK的下载页面下载到最新版的地图SDK,下载地址为:http://developer.baidu.com/map/index.php?title=androidsdk/sdkandev-download
为了给开发者带来更优质的地图服务、满足开发者灵活使用SDK的需求,百度地图SDK自v2.3.0起,采用了可定制的形式为用户提供开发包。百度地图SDK按功能可分为:基础地图、检索功能、LBS云检索、计算工具和周边雷达五个部分,开发者可根据自身的实际需求,任意组合这五种功能,点击下载页面的“自定义下载”,即可下载相应的开发包来完成自己的应用开发。
基础地图:包括基本矢量地图、卫星图、实时路况图,各种地图覆盖物,瓦片图层,OpenGL绘制能力。此外还包括各种与地图相关的操作和事件监听;
检索功能:包括POI检索(周边、区域、城市内),Place详情检索,公交信息查询,路线规划(驾车、步行、公交),地理编码/反地理编码,在线建议查询,短串分享等;
LBS云检索:包括LBS云检索(周边、区域、城市内、详情);
计算工具:包括计算两点之间距离、计算矩形面积、坐标转换、调启百度地图客户端、判断点和圆/多边形位置关系、本地收藏夹等功能;
周边雷达:包含位置信息上传和检索周边相同应用的用户位置信息功能;
注:本套开发指南是针对默认的全功能包编写,开发者在使用定制化的SDK进行开发时,请参考开发指南中相对应的章节获取更多信息。
兼容性
支持Android 2.1及以上系统。
申请密钥
简介
在使用百度地图SDK为您提供的各种LBS能力之前,您需要获取百度地图移动版的开发密钥,该密钥与您的百度账户相关联。因此,您必须先有百度帐户,才能获得开发密钥。并且,该密钥与您创建的过程名称有关,具体流程请参考如下介绍。
Key的申请地址为:http://lbsyun.baidu.com/apiconsole/key
注意:
1.为了给用户提供更安全的服务,Android SDK自v2.1.3版本开始采用了全新的Key验证体系。因此,当您选择使用v2.1.3及之后版本的SDK时,需要到新的Key申请页面进行全新Key的申请;(新旧key不可通用)
2.新Key机制,每个Key仅且唯一对于1个应用验证有效,即对该Key配置环节中使用的包名匹配的应用有效。因此,多个应用【包括多个包名】需申请多个Key,或者对1个Key进行多次配置;
3.在新key机制下,若你需要在同一个工程中同时使用百度地图、定位、导航SDK可以共用同一个key;
4.如果您在Android SDK开发过程中使用了LBS云服务则需要为该服务单独申请一个for server类型的密钥;
申请步骤
-
登录百度账号
-
登陆API控制台
登录会跳转到API控制台服务,具体如下图:
-
创建应用
点击"创建应用",进入创建AK页面,输入应用名称,将应用类型改为:“Android SDK”:
-
配置应用
在应用类型选为“Android SDK”后,需要配置应用的安全码,如下图所示:
-
获取安全码
安全码的组成规则为:Android签名证书的sha1值+packagename例如:
SHA1:BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75
包名:com.baidumap.demo
Android应用获取包名packagename,根据开发工具不同,获取位置有所不同
1、使用 eclipse开发
包名是Android应用程序本身在AndroidManifest.xml中定义的名称,例如:
2、使用 Android studio开发
包名需要在文件build.gradle中查询 applictionId,例如:
Android签名证书的sha1值获取方式有两种:
第一种方法:使用keytool
第1步:运行进入控制台
第2步:定位到.android文件夹下,输入cd .android
第3步:输入keytool -list -v -keystore debug.keystore,会得到三种指纹证书,选取SHA1类型的证书(密钥口令是android),例如:
其中keytool为jdk自带工具;keystorefile为Android签名证书文件
第二种方法:在eclipse中,在adt 22中直接查看
如果使用adt 22,可以在eclipse中直接查看:windows -> preferance -> android -> build。如下图示:
其中“SHA1 fingerprint”值即为Android签名证书的sha1值
-
成功创建KEY
在输入安全码后,点击“确定”完成应用的配置工作,您将会得到一个创建的Key,请妥善保管您所申请的Key。到这您就可以使用新Key来完成您的开发工作了。
配置环境及发布
Android Studio工程配置方法
第一步:在工程app/libs目录下放入baidumapapi_vX_X_X.jar包,在src/main/目录下新建jniLibs目录,放入包含libBaiduMapSDK_vX_X_X_X.so的文件夹如下图所示,注意jar和so的前3位版本号必须一致,并且保证使用一次下载的文件夹中的两个文件,不能不同功能组件的jar或so交叉使用。
第二步:工程配置还需要把jar包集成到自己的工程中,如图上图所示,放入libs目录下。对于每个jar文件,右键-选择Add As Library,导入到工程中。对应在build.gradle生成工程所依赖的jar文件说明,如图所示:
jar的配置也可参考eclipse方法,进行以下操作:
菜单栏选择 File—>Project Structure。
在弹出的Project Structure对话框中,选择module,然后点击 Dependencies选项卡.
点击绿色的加号选择File dependency.然后选择要添加的jar包即可完成上边的操作后在app目录下的build.gradle文件中,会有引入的类库,如图所示。
应用混淆
集成地图SDK的应用,在打包混淆的时候,需要注意与地图SDK相关的方法不可被混淆。混淆方法如下:
-keepclass com.baidu.**{*;}
-keepclass vi.com.**{*;}
-dontwarn com.baidu.**
保证百度类不能被混淆,否则会出现网络不可用等运行时异常
Hello BaiduMap
开发工具
Android Studio或Eclipse
显示百度地图
百度地图SDK为开发者提供了便捷的显示百度地图数据的接口,通过以下几步操作,即可在您的应用中使用百度地图数据:
第一步:创建并配置工程(具体方法参见配置环境及发布部分的介绍);
第二步:在AndroidManifest中添加开发密钥、所需权限等信息;
(1)在application中添加开发密钥
<application>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="下图红色矩形框中的字符串值" />
</application>
2)添加所需权限
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permissionandroid:name="android.permission.WAKE_LOCK"/>
<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permissionandroid:name="android.permission.GET_TASKS" />
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permissionandroid:name="android.permission.WRITE_SETTINGS" />
第三步,在布局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全局变量:
publicclass MainActivityextendsActivity {
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
}
}
注意:在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中
第五步,创建地图Activity,管理地图生命周期;
publicclass MainActivityextendsActivity {
MapView mMapView =null;
@Override
protected void onCreate(BundlesavedInstanceState) {
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();
}
}
完成以上步骤后,运行程序,即可在您的应用中显示如下地图:
以上的例子为大家介绍了如何构建一个基础的地图页面。地图控件自v2.3.5版本起,支持多实例,即开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。具体使用方法请参考MutiMapViewDemo中的相关介绍。
此外,自v2.3.5版本开始。MapView控件还增加了对Fragment框架的支持。用户可以使用SupportMapFragment控件完成相应框架内的开发工作(详见MapFragmentDemo)。