虽然之前一直在搞iOS开发,开发小组的缺人搞android,然后去搞android,第一个任务就是将项目里的android 百度地图sdk版本更新到最新版本。
android百度地图自3.0版本之后就改动了很多,原有的BMapManager 、MapController 、图层等等这些东西都不复存在,了解之前的版本之后,再建立最新的版本框架时往往会被之前的框架所束缚,那么不如从小白做起,忘掉之前版本的框框,全部丢掉重新来过,你会发现最新版本虽然缺陷不少,但是上手没有想象的那么难。
首先先把学习和交流的地方贴出来,大牛们直接可以去
http://developer.baidu.com/map/index.php?title=androidsdk
下载百度地图sdk的demo学习就可以,当然必不可少的就是去研读一下它的类参考,有什么问题和bug可以去社区的技术论坛上提问。
第一步,先把一个基础的地图显示出来。
1.使用百度地图sdk之前先要去http://lbsyun.baidu.com/apiconsole/key申请密钥。
2.将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;
3.在AndroidManifest中添加开发密钥、所需权限等信息
(1)在application中添加开发密钥
<application>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者 key"/>
</application>
(2)添加所需权限
<!-- 访问互联网权限 -->
<uses-permissionandroid:name="android.permission.INTERNET" />
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!-- SDK离线地图和cache功能需要读写外部存储器 -->
<uses-permissionandroid:name="android.permission.WRITE_SETTINGS" />
<!-- 获取设置信息和详情页直接拨打电话需要以下权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permissionandroid:name="android.permission.CALL_PHONE" />
<!-- 使用定位功能所需权限,demo已集成百度定位SDK,不使用定位功能可去掉以下6项 -->
<!-- 这个权限用于进行网络定位 -->
<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION" >
</uses-permission>
<!-- 这个权限用于访问GPS定位 -->
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION" >
</uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE">
</uses-permission>
<!-- 用于读取手机当前的状态 -->
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE" >
</uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
<!-- 访问网络,网络定位需要上网 -->
<uses-permissionandroid:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据 -->
<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
</uses-permission>
4.在布局xml文件中添加地图控件;
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"/>
5.在应用程序创建时初始化SDK引用的Context全局变量(这个很重要,之前老的版本里没有这个,在新的版本里如果缺少这个初始化地图时会出现崩溃,如果打开应用时发现在初始化地图出现崩溃,就先检查这里是否引用了全局变量)
6.创建地图Activity,管理地图生命周期;
publicclass MainActivity extends Activity {
MapView mMapView =null;
@Override
protectedvoid 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
protectedvoid onDestroy(){
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protectedvoid onResume(){
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protectedvoid onPause(){
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}
以上6步就可以将百度地图显示出来。
那么问题来了,百度地图依旧不显示怎么办呢?以下是我总结的办法:
(1) 重新去申请一个key,详情见第一步,并且key是Android SDK安全码组成:数字签名+;+包名。中间一定要是“;”,粗心的同学可能因为那个申请的key不正确。
(2) 旧版本的key验证需要一个获取手机系统的时间,将测试手机的时间调整为当前时间。
(3) 网络问题,网络比较差的情况下加载地图比较慢,需要等一下。
整理做了一个PPT,仅供参考:http://download.csdn.net/detail/u010980446/9551123