百度地图sdk学习心得

来源:互联网 发布:地理信息系统算法 编辑:程序博客网 时间:2024/06/05 03:26

       虽然之前一直在搞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

0 0