真正解决百度定位只定位一次的问题
关于百度定位初始化完之后,只回调一次BDAbstractLocationListener的问题,也是困扰了我半天,网上找了半天答案,基本都说是配置的问题,但是我看了下我的配置,我敢发四绝对没问题,那么配置没问题,再有可能就是sha1获取的有问题,但是我找了其他的工具获取sha1,跟我之前按照官网获取的sha1一模一样,所以全网给的答案都并不能真正解决定位的问题,真正解决的办法看下面,亲测有效
就是初始化完LocationClient后,“一定给他变成成员变量”,一定给他变成成员变量"一定给他变成成员变量",重要的事情说三遍,否则就只会定位一次,再也定位不了了,以下是我的完整代码:
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
private LocationClient locationClient;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
//初始化百度定位
initBaiduSDK();
}
private void initBaiduSDK() {
locationClient = new LocationClient(getApplicationContext());
locationClient.registerLocationListener(bdAbstractLocationListener);
LocationClientOption locationClientOption = new LocationClientOption();
//设置是否需要地址信息,默认不需要。设置为true后,可以再listener中通过getCountry()、getProvice()、getCity()等方法得到具体的地区街道信息
locationClientOption.setIsNeedAddress(true);
locationClientOption.setCoorType("bd09ll");//设置坐标类型
locationClient.setLocOption(locationClientOption);
locationClient.start();
}
BDAbstractLocationListener bdAbstractLocationListener = new BDAbstractLocationListener() {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
StringBuilder sb = new StringBuilder();
sb.append("纬度:").append(bdLocation.getLatitude()).append("\n");
sb.append("经度:").append(bdLocation.getLongitude()).append("\n");
sb.append("定位方式:");
sb.append("地址:").append(bdLocation.getCountry()).append(bdLocation.getProvince()).append(bdLocation.getCity()).append(bdLocation.getAddrStr());
if (bdLocation.getLocType() == BDLocation.TypeGpsLocation) {
sb.append("GPS");
} else if (bdLocation.getLocType() == BDLocation.TypeNetWorkLocation) {
sb.append("网络");
}
Logger.i("定位信息:" + bdLocation.getLatitude());
Logger.i("定位信息:" + sb);
}
};
}