一、定位功能的实现:
- 创建LocationClient
- implements BDLocationListener接口,重写onReceive方法
- 创建并注册listener
- 创建并设置LocationClientOption
LocationClientOption sample:
option.setCoorType("bd09ll");
option.setIsNeedAddress(true);
option.setOpenGps(true);
option.setScanSpan(1000);
onReceive sample:
Log.e("mybaidu","latitude:" + location.getLatitude() + "; longtitude:" + location.getLongitude());
MyLocationData data = new MyLocationData.Builder()//
.accuracy(location.getRadius())//
.latitude(location.getLatitude())//
.longitude(location.getLongitude())//
.build();
mBaiduMap.setMyLocationData(data);
if(isFirstIn){
LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLngZoom(latLng,18);
mBaiduMap.animateMapStatus(msu);
isFirstIn = false;
Toast.makeText(getContext(), location.getAddrStr(),Toast.LENGTH_SHORT).show();
}
二、NOTE:
- 在
AndroidManifest.xml
中添加服务(百度API文档中未提)
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote">
<intent-filter>
<action android:name="com.baidu.location.service_v2.2">
</action>
</intent-filter>
</service>
- 在onResume()中进行开启定位
mBaiduMap.setMyLocationEnabled(true);
mLocationClient.start();
- 在onStop()中关闭定位
mBaiduMap.setMyLocationEnabled(false);
mLocationClient.stop(); - 在onPause()/onDestroy()中分别进行mapView的onPause()/onDestroy()
三、遇到的问题
1.打开地图显示一片白/蓝,不显示地图,原因是申请百度地图AK时,数字签名(SHA1)不正确
- 解决方案:
- 使用命令行进入.android路径(c:\users\用户名.android)
- 开发模式下输入命令:
keytool -list -v -keystore debugstore
回车,输入密码,默认是android(输入时屏幕不显示,直接打完按回车,当时被这个坑了好一会),即可获得SHA1。
2.百度定位获取经纬度正确,但是在地图上显示不正确,有一两公里的偏差,原因是忘了把option设置给mLocationClient,这个是粗心导致的,也浪费了自己好多时间。
- 解决方案:
- 重复多次定位,记得一定要设置option