目录
一、注册和获取密钥
什么是密钥
开发者在使用SDK之前需要获取百度地图移动版开发密钥(AK),该AK与您的百度账户相关联。请妥善保存您的AK,地图初始化时需要使用AK。
获取开发密钥(AK)
百度地图 SDK开发密钥的申请地址为:http://lbsyun.baidu.com/apiconsole/key
申请步骤大致可分为如下四个步骤:
1若您未登录百度账号,请登录您的百度账号,如下图:
(若您没有百度账号,点击右下角根据提示注册并登录)
2登录后将进入API控制台,如下图:
3点击“创建应用”开始申请开发密钥,如下图:
4填写应用名称,注意应用类型选择“Android SDK”、正确填写SHA1 和 程序包名(SHA1和包名的获取方法见下文)。如图:
填写清楚以上内容之后点击提交会为您生成该应用的AK,到这您就可以使用AK来完成您的开发工作了。
注意:同一个AK中,可以填写开发版SHA1和发布版SHA1,这样app开发、测试到发布整个过程中均不需要改动AK。
此功能完全兼容以前的AK,默认将原有的SHA1放在发布版SHA1上,开发者也可自己更新,将原有的开发版本的AK和发布版本的AK对应的SHA1值合并后使用。
获取包名
根据您使用的开发工具,包名的获取方式有所不同。
使用 Android Studio 开发
在app目录下的build.gradle文件中找到applicationId,并确保其值与AndroidManifest.xml中定义的package相同。
注意:使用Android Studio开发,如遇到applicationId 与package不一致的情况,以appclicationid为准。查看Android官方说明链接
获取SHA1
调试版本(debug)和发布版本(release)下的 SHA1 值是不同的,发布 apk 时需要根据发布 apk 对应的 keystore 重新配置 Key。(注意:我们这里使用的是调试版本,在开发时请使用调试版本) 。
在Android Studio中添加release签名信息。
会在根目录的build.gradle中生成签名信息,如下所示
使release配置生效, 需要添加以下信息。 signingConfig signingConfigs.release
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
点击左侧的signingReport,会生成release和debug的SHA1信息,如下所示。
将生成的SHA1填写到注册信息中以获取密钥。
二、Android Studio工程配置
创建AndroidStudio项目
在Android Studio中创建一个Android项目。
在项目中集成BaiduMap SDK
1下载开发包
普通的地图服务和包含步骑行导航的地图服务需要下载不同的开发包,点击下载开发包。
1、下载普通开发包
第二行选择基础地图服务
2、下载步骑行导航的开发包
第二行选择步骑行导航(含基础地图)
注: 其他的功能(如定位服务、检索功能、全景图功能等则根据您的开发需要下载)
2将开发包拷贝至工程(截图以普通地图服务的开发包为例,步骑行导航的开发包同理)
1、添加jar文件
打开解压后的开发包文件夹,找到BaiduLBS_Android.jar文件将其拷贝至工程的app/libs目录下,如图:
2、添加so文件
在src/main/目录下新建jniLibs目录(如果您的项目中已经包含该目录不用重复创建),在下载的开发包中拷贝项目中需要的CPU架构对应的so文件文件夹到jniLibs目录,如图:
这里 我们只拷贝armabi和x86以减小包体积大小。
但得添加以下信息,以保证其它第三方库也只生成这 两种so库,要不其它库有x86-64,而地图没有会报错崩溃。
3往工程中添加jar文件
在工程配置中需要将前面添加的jar文件集成到我们的工程中。
1、菜单栏选择File -> Project Structure
2、在弹出的Project Structure对话框中选中左侧的Modules列表下的app目录,然后点击右侧页面中的Dependencies选项卡。如图:
3、点击左下角加号“➕”选择Jar dependency,然后选择要添加的jar文件即可(此处为我们拷贝至libs目录下的BaiduLBS_Android.jar) 结果如图:
完成上述操作之后在app目录的build.gradle的dependencies块中生成了工程所依赖的jar文件的对应说明,见方法一。
应用混淆
现在我们的应用中已经集成了百度地图SDK,当我们在打包混淆的时候需要注意于BaiduMap SDK 相关的内容不应该被混淆,所以我们需要配置混淆文件。
1打开app目录下的build.gradle文件,在release代码块中添加如下内容(若已经由Android Studio自动生成,则不用手动配置)
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
如在上面我们创建的MapActivity项目中:
若您的代码包含debug版本并且也需要混淆的话,请在debug代码块中也添加上述代码。
2编写混淆文件,打开app目录下的proguard-rules.pro文件,添加如下代码。
-keep class com.baidu.** {*;}
-keep class mapsdkvi.com.** {*;}
-dontwarn com.baidu.**
注意:保证百度类不能被混淆,否则会出现网络不可用等运行时异常。
三、HelloMap
百度地图SDK为开发者提供了便捷的使用百度地图能力的接口,通过以下几步操作,即可在您的应用中使用百度地图:
1第一步 配置AndroidManifest.xml文件
1.在<application>中加入如下代码配置开发密钥(AK):
<application>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者 key" />
</application>
若您还不曾申请开发密钥,点此申请
2. 在<application/>外部添加如下权限声明:
<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
注:自Android6.0起部分权限的使用需要开发者在代码中动态申请。
2第二步 在布局文件中添加地图容器
MapView是View的一个子类,用于在Android View中放置地图。MapView的使用方法与Android提供的其他View一样。
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
3第三步 地图初始化
注意:在SDK各功能组件使用之前都需要调用“SDKInitializer.initialize(getApplicationContext())”,因此建议在应用创建时初始化SDK引用的Context为全局变量。
新建一个自定义的Application,在其onCreate方法中完成SDK的初始化。示例代码如下:
public class DemoApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
SDKInitializer.initialize(this);
//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
SDKInitializer.setCoordType(CoordType.BD09LL);
}
}
在AndroidManifest.xml文件中声明该Application
4创建地图Activity,管理MapView生命周期
注意:在项目中使用地图的时候要特别注意合理地管理地图生命周期,这非常重要。
以下示例代码简述对地图生命周期的管理:
public class MainActivity extends Activity {
private MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
}
完成以上工作即可在您的应用中显示地图:
如果显示结果是方格,并不显示地图,需要检查SHA1、包名及密钥是否填写正确,或者Application在Manifest中是否注册生效。
四、切换地图类型
地图类型
百度地图SDK为您提供了3种类型的地图资源(普通矢量地图、卫星图和空白地图),BaiduMap 类提供图层类型常量,详细如下:
类型名称 | 说明 |
---|---|
MAP_TYPE_NORMAL | 普通地图(包含3D地图) |
MAP_TYPE_SATELLITE | 卫星图 |
MAP_TYPE_NONE | 空白地图 |
开发者可以利用BaiduMap中的setMapType()方法来设置地图类型,下面做简单展示。
普通地图
基础的道路地图。 显示道路、建筑物、绿地以及河流等重要的自然特征。
设置普通地图的代码如下:
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
//普通地图 ,mBaiduMap是地图控制器对象
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
显示的效果如下:
卫星地图
显示卫星照片数据。
设置卫星地图的代码如下:
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
//卫星地图
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
显示的效果如下:
注意:卫星图只支持缩放到20级。