我试图检索用户的位置一次,然后断开()与位置服务的连接,以避免电池使用。问题是,即使我断开连接后,我也会看到状态区域中的位置箭头图标 - 即使在客户端上调用disconnect之后,也不会调用onDisconnected()回调。
这就是我正在做的事情:
在onResume()
我连接:
mLocationClient = new LocationClient(this, this, this);
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(LOCATION_UPDATE_INTERVAL);
mLocationRequest.setFastestInterval(1);
mLocationClient.connect();
在onConnected()
中我尝试获取lastlocation,如果它的NOT为null,则得到它并断开与位置服务的连接。如果它为null,我开始监听更新:
if (mLocationClient.getLastLocation() != null) {
userLocation = mLocationClient.getLastLocation();
stopLocationServices();
// do something which requires location
} else {
mLocationClient.requestLocationUpdates(mLocationRequest, this);
}
在onLocationChanged
userLocation = mLocationClient.getLastLocation();
stopLocationServices();
// do something which requires location
我的stopLocationServices()
函数如下所示:
private void stopLocationServices() {
if (mLocationClient != null) {
try {
mLocationClient.removeLocationUpdates(this);
mLocationClient.disconnect();
} catch (Exception e) {}
}
mLocationClient = null;
}
感谢您的帮助。
答案 0 :(得分:0)
如果getLastLocation()没有返回null并且顺序调用了stopLocationServices(),那么你将尝试在mlocationClient上删除LococationUpdates()而不首先请求它们,这可能是抛出异常,也许是onDisconnected的原因( )从未被称为。
答案 1 :(得分:0)
如果您仍然遇到此问题..
我认为您在有机会断开连接之前将位置客户端设置为null。
尝试将此mLocationClient = null;进入onDisconnected方法(从stopLocationServices()中删除)。
public void onDisconnected() {
mLocationClient = null;
}