我正在使用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();
并且它有效,不知怎么断开连接会删除最后一个位置
为什么?我错过了什么吗?
答案 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时,我都会创建一个新的构建器