百度地图 Android SDK是一套基于Android 2.1及以上版本设备的应用程序接口,我们可以使用该套 SDK开发适用于Android系统移动设备的地图应用,通过调用地图SDK接口,轻松访问百度地图服务和数据。
本文地图展示主要包括 普通地图(2D,3D),卫星地图和实时交通图;可通过接口或手势控制来实现地图的点击、双击、长按、缩放、旋转、改变视角等操作。本套开发指南主要是针对Eclipse开发环境进行编写的。
- 应用名称:可以用汉字、英文,但是不能涉及敏感词,比如百度、地图。
- 应用类型:Android SDK
- 启用服务:可以全选,也可以选择常用的。
- 发布版SHA1和开发版SHA1:可以直接写一样的,只要不是为了发布应用。如何获取开发版SHA1(在Eclipse中选择window->preferences->Android->Build)
- 包名:必须和自己创建项目的包名保持一致
提交后你就会得到一个AppKey(AK),下面配置环境会用到的。
接下来配置开发环境,找到刚刚下载的SDK里的libs包,把包里面的内容全部拷贝到自己的libs目录下面,Build Path
保证百度类不能被混淆,否则会出现网络不可用等运行时异常
-keep class com.baidu.** {*;}
-keep class vi.com.** {*;}
-dontwarn com.baidu.**
显示百度地图
第一步,在AndroidManifest中添加开发密钥,所需权限等;
- 在Application中添加开发密钥
<application>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者 key" />
</application>
- 添加所需权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android: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" />
第三步,在Activity中初始化SDK
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);
}
}
第四步,管理地图生命周期
public class MainActivity extends Activity {
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();
}
}
完成这些步骤后,运行就能显示地图。
那么百度地图SDK还未我们提供了三种类型的地图(普通地图,卫星地图和空白地图),实现这些功能非常简单,核心代码如下:
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
//普通地图
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
//卫星地图
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
//空白地图, 基础地图瓦片将不会被渲染。在地图类型中设置为NONE,将不会使用流量下载基础地图瓦片图层。使用场景:与瓦片图层一起使用,节省流量,提升自定义瓦片图下载速度。
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);
还可以实现实时交通图
//开启交通图
mBaiduMap.setTrafficEnabled(true);
以及城市热力图
//开启城市热力图
mBaiduMap.setBaiduHeatMapEnabled(true);