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
- 在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>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE">uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">uses-permission>
<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" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">uses-permission>
3.坐标系说明
目前国内主要有以下三种坐标系:
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米内的资源