public void startLoaction(final BDLocationListener locationListener) {
mLocClient = new LocationClient(mContext.getApplicationContext());
mLocClient.registerLocationListener(new BDLocationListener() {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
locationTip(bdLocation);// 调用了2次
locationListener.onReceiveLocation(bdLocation);
}
});
LocationClientOption option = new LocationClientOption();
option.disableCache(true);//禁止启用缓存定位
option.setOpenGps(true);// 打开GPS
option.setCoorType("bd09ll"); // 设置坐标类型
option.setPriority(LocationClientOption.GpsFirst);
// 设置网络优先(不设置,默认是gps优先)
option.setIsNeedLocationPoiList(true);
option.setIsNeedAddress(true);
// 返回的定位结果包含地址信息
option.setAddrType("all");
int scanTime = KeyConstant.locationScan;
Logger.e("定位的时间间隔",scanTime+"");
option.setScanSpan(scanTime);// 设置发起定位请求的间隔时间为5s(小于1秒则一次定位)
mLocClient.setLocOption(option);
if(!mLocClient.isStarted()){
mLocClient.start();
}}
onReceiveLocation会回调两次,避免方法使用最新的百度SDK,在5.1版本时百度首次定位会触发这样的逻辑,只是为了加速首次定位的速度。解决办法在回调后stop()。但是百度并不建议直接stop(),所以说最好的方法还是自己写一个boolean值进行判读,onReceiveLocation调用一次时候就将boolean改变。从而保证了onReceiveLocation内信息只走了一次。http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=109126&extra=page%3D1