百度地图SDK功能接入

百度地图SDK功能接入

申请AK(API-Key)

Android百度定位SDK自v4.0版本之后开始引入了百度地图开放平台的统一AK验证体系。
通过AK机制,开发者可以更方便、更安全地配置自身使用的百度地图资源(如设置服务配额等)。
随着百度地图开放平台的发展,未来您还可通过AK获得更多服务(如提升服务次数、定制化服务等)。


注意:
1.当您选择使用v4.0及之后版本的定位SDK时,需要先申请且配置AK,并在程序相应位置填写您的AK。(选择使用v3.3及之前版本SDK的开发者,不需要使用AK)
2.每个AK仅且唯一对于1个应用验证有效,即对该AK配置环节中使用的包名匹配的应用有效。因此,多个应用(包括多个包名)需申请多个AK,或者对1个AK进行多次配置。
3.若您需要在同一个工程中同时使用Android定位SDK和Android地图SDK,可以使用同一个AK
参考链接:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/key
用Eclipse工具调试时,查看SHA1步骤:
windows -> preferance -> android -> build若Custom debug keystore的值不为空,则需要使用下面的SHA1 fingerprint,否则使用上面的SHA1 fingerprint。

环境配置

1.导入jar包和so库

将百度地图jar包放在项目的libs目录下,将so库放在libs/armeabi-v7a目录下


2.设置AndroidManifest.xml(包括权限设置、AcessKey设置)

1.在application中添加开发密钥

<application>  
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="开发者 key" />  
</application>

2.添加所需权限

<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" />

3.在布局xml文件中添加地图控件

<com.baidu.mapapi.map.MapView  
    android:id="@+id/bmapView"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:clickable="true" />

4.在应用程序创建时初始化 SDK引用的Context 全局变量

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);  
    }  
}
注意:在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中

5.创建地图Activity,管理地图生命周期

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();  
        }  
    }

按照如上步骤,即可在应用中接入百度地图相关功能。

地图未成功加载的可能原因分析

1.AK参数有误
错误码501~700,参照说明文档重新申请AK

2.网络异常
错误码 62/63, 检查网络设置

3.Jar包或so配置有误
错误码 162,检查jar包和so的配置

4.禁用获取位置信息权限
错误码167,服务端定位失败,请您检查是否禁用获取位置信息权限,尝试重新请求定位。


项目中百度地图相关功能

1.基础地图功能主页MDSMapDetailFragment

在fragment_map_detail.xml文件中,引入百度MapView,并添加地图样式、放大缩小、离线地图、附近资源等Icon。
在MDSMapDetailFragment.java类管理地图生命周期,在onCreate方法中初始化定位initLocationClient,实现定位回调BDLocationListener,在onReceiveLocation回调参数BDLocation有定位信息。MDSMapDetailFragment.java中的handler处理定位信息,在百度地图上显示定位结果。在onclick事件中监听各种Icon点击,并做相应处理。

2.定位功能
在同一个工程中同时使用Android定位SDK和Android地图SDK,可以使用同一个AK

  1. 在Application标签中声明SERVICE组件,每个APP拥有自己单独的定位SERVICE
<service android:name="com.baidu.location.f" 
android:enabled="true" android:process=":remote">
</service>

2.声明权限

<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

3.坐标系说明
目前国内主要有以下三种坐标系:


  • WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系;
  • GCJ02:表示经过国测局加密的坐标;
  • BD09:为百度坐标系,其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标;
    Android定位SDK产品,支持全球定位,能够精准的获取经纬度信息。根据开发者的设置,在国内获得的坐标系类型可以是:国测局坐标、百度墨卡托坐标 和 百度经纬度坐标。在海外地区,只能获得WGS84坐标。请开发者在使用过程中注意坐标选择。

4.初始化LocationClient类

代码MDSMapDetailFragment中MapUtil.initLocationClient,配置定位SDK参数,实现BDLocationListener接口的onReceiveLocation方法。

5.发起定位

调用LocationClient.start方法发起定位,调用start后,只需等待定位结果自动回调。

注意:在定位结果返回后,需要将坐标转换为百度坐标,利用百度提供的标准转换方法CoordinateConverter转换坐标,不然显示在地图上会不准确。


6.附近资源

在地图主页面中点击“附近”,跳转至MDSNearMapActivity,显示附近的资源,如终端、视频源。

附近的资源获取方式:
@1.在GotaCallManager.java中的onMessageReceived回调方法里parserMessageAreaResource解析服务器回传的SIP消息内容,在AreaResourcesParser中XML解析.
@2.注册附近资源内容监听:MDSNearMapActivity.java中的registerARCompleteMessage方法。
@3.解析附近资源后的处理:MDSNearMapActivity.java中的
processNARResultNotify
默认显示附近2000米内的资源

猜你喜欢

转载自blog.csdn.net/adayabetter/article/details/81064604