一旦我调用client.disconnect,位置图标就不会消失

时间:2014-06-20 01:31:21

标签: android location google-play-services

我试图检索用户的位置一次,然后断开()与位置服务的连接,以避免电池使用。问题是,即使我断开连接后,我也会看到状态区域中的位置箭头图标 - 即使在客户端上调用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;
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果getLastLocation()没有返回null并且顺序调用了stopLocationServices(),那么你将尝试在mlocationClient上删除LococationUpdates()而不首先请求它们,这可能是抛出异常,也许是onDisconnected的原因( )从未被称为。

答案 1 :(得分:0)

如果您仍然遇到此问题..

我认为您在有机会断开连接之前将位置客户端设置为null。

尝试将此mLocationClient = null;进入onDisconnected方法(从stopLocationServices()中删除)。

public void onDisconnected() {

mLocationClient = null;

}