关于百度定位的问题:
首先需要导入locSDK_4.2.jar和armeabi/libBaiduMapSDK_v3_0_0.so,liblocSDK4d.so
然后实例化LocationClient对象,并为该对象设置属性,如精度,定位类型,定位间隔如下:
LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationMode.Hight_Accuracy);//设置定位模式 //coorType类型如下: //bd09ll //bd09 //gcj02 option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02 int span=1000; option.setScanSpan(span);//设置发起定位请求的间隔时间为5000ms option.setIsNeedAddress(true); mLocationClient.setLocOption(option); |
上述属性的值,见百度地图定位 API
地址:http://developer.baidu.com/map/index.php?title=android-locsdk/geosdk-android-download
之后需要设置返回结果监听,如下:
mMyLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(mMyLocationListener);
/** * 实现实位回调监听 */ public class MyLocationListener implements BDLocationListener {
@Override public void onReceiveLocation(BDLocation location) { // Receive Location double latitude = location.getLatitude(); double longtitude = location.getLongitude(); if (lastPoint != null) { if (lastPoint.getLatitude() == location.getLatitude() && lastPoint.getLongitude() == location.getLongitude()) { BmobLog.i("两次获取坐标相同"); // 若两次请求获取到的地理位置坐标是相同的,则不再定位 mLocationClient.stop(); return; } } lastPoint = new BmobGeoPoint(longtitude, latitude); //System.out.println("位置:"+latitude+":"+longtitude); } }
|
之后可以调用 LocationClient的start()方法开始定位,
但光是这样是没办法完成定位的,我们可以进行测试,但进行定位监听无法接收到事件,或者说在进行start()方法后,没有开始定位。
关于这点我做了很多尝试,引入了几乎所有的权限,但却无法使用,于是去看了百度定位的demo,发现在其清单文件中写了一个service定义,如下:
<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> |
该service并不存在于代码中,而是定位包中的,我在自己的项目中也加入了这个service,之后就可以进行定位了,原因未知