2015-10-02 106 views
0

我正在使用谷歌播放服务来获取用户的最后一次已知连接。getLastLocation不能在第二次工作

@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。正式文档状态 -

如果某个位置不可用,而这种情况很少发生,则会返回空 。

很好,但是我知道确实存在一个位置,我刚刚在第二个前检索它。

我做了一个快速实验,去除_googleApiClient.disconnect();和它的作品,不知何故断开删除最后一个位置

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

+0

为什么你断开创建一个新的建设者?你有没有尝试删除? –

+0

@CodyHarness这就是我写的,我删除断开连接,它的工作原理,但根据正式的文件,建议在onStop断开连接 –

回答

0

发现问题。

我正在使用roboguice进行注射。

我不是每次创建一个新的GoogleApiClient.Builder,而是使用一个singleton来创建它,它看起来像在调用断开连接时破坏了构建器的状态。

的解决方案 - 我每一次我需要创建一个GoogleApiClient

0

有几件事情要考虑:

1)你应该连接到GoogleApiClientonStart()和断开在 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()返回的位置可以被认为是合理的最新的。