Невозможно остановить обновления местоположения с помощью API-интерфейсов

Привет, я занимаюсь разработкой небольшого приложения для Android, в котором я пытаюсь получать обновления местоположения, используя слитые обновления. Я попробовал это следующим образом:

private void processStartLocation() {
    mGoogleApiClient.connect();
}

@Override
public void onConnected(Bundle bundle) {

    updateBooleanSharedPreference(this, "isLocationUpdatesOn", true);
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, locationPendingIntent);

    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    if (mLastLocation != null) {
        lat = String.valueOf(mLastLocation.getLatitude());
        lon = String.valueOf(mLastLocation.getLongitude());
        time = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS").format(new Date(mLastLocation.getTime()));
        updateUI();
    }
}

private void processStopLocation() {

    LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, locationPendingIntent);
}

Так что все работает нормально. Я могу получать свои обновления. Но когда я пытаюсь остановить обновления, у меня возникает следующая проблема:

java.lang.IllegalStateException: GoogleApiClient is not connected yet.
at com.google.android.gms.internal.zzlh.zzb(Unknown Source)
at com.google.android.gms.internal.zzli.zzb(Unknown Source)
at com.google.android.gms.location.internal.zzd.removeLocationUpdates(Unknown Source)

Я делаю что-то не так? Нужна помощь. Спасибо.

2 ответа

Видя, что ошибка жалуется на удаление всех обновлений местоположения для данного ожидающего намерения (locationPendingIntent) поскольку GoogleApiClient не подключен - возможно, вы должны проверить его состояние подключения, прежде чем сделать звонок:

private void processStopLocation() {
    if(mGoogleApiClient !=null){
       LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
    }
    else{
     //no need to stop updates - we are no longer connected to location service anyway
    }
}

Не может видеть, где или когда вы вызываете processStopLocation(), но эта ошибка обычно означает, что ваш объект mGoogleApiClient, используемый в processStopLocation(), потерял ссылку на подключенный клиентский объект Google Api. Возможно, установщик для объекта клиента Google Api в processStartLocation() и метод get в processStopLocation() могли бы работать. Опять же, не зная точно, когда начинается процесс обновления и когда вызывается процесс остановки, трудно определить проблему

Другие вопросы по тегам