getLastLocation第二次不起作用

时间:2015-10-02 20:06:16

标签: android location google-play-services

我正在使用Google Play服务来获取用户最后的已知连接。

@Override
public void onConnected(Bundle connectionHint) {


  final Location lastLocation = LocationServices.FusedLocationApi.getLastLocation(
                _googleApiClient);
}

 @Override
    protected void onResume() {
        super.onResume();

        connectToGooglePlay();   
    }

@Override
    protected void onPause() {
        super.onPause();
        if (_googleApiClient != null) {
            _googleApiClient.disconnect();
        }
    }

按预期工作。

每当我点击后退按钮然后再次启动应用程序时,就会出现问题。我的应用程序崩溃,因为getLastLocation返回null。正式文件陈述 -

  

如果某个位置不可用,这应该很少发生,则为null   将被退回。

很好,但是我确定一个位置存在,我刚刚在一秒前检索到它。

我做了一个快速实验并删除了_googleApiClient.disconnect();并且它有效,不知怎么断开连接会删除最后一个位置

为什么?我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

需要考虑的一些事项:

1)您应该连接到GoogleApiClient中的onStart()并断开连接 onStop()

@Override
protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}

@Override
protected void onStop() {
    mGoogleApiClient.disconnect();
    super.onStop();
}

2)您的代码应始终假设getLastLocation()可能会返回null。做空检查。

3)使用isLocationAvailable()时使用getLastLocation()。如果它返回true,则可以假定getLastLocation()返回的位置是合理的最新位置。

答案 1 :(得分:0)

发现问题。

我使用roboguice进行注射。

我不是每次都创建一个新的GoogleApiClient.Builder,而是使用单例创建它一次,看起来当调用disconnect时它会破坏构建器的状态。

解决方案 - 每次我需要创建GoogleApiClient时,我都会创建一个新的构建器