Невозможно остановить обновления местоположения с помощью 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() могли бы работать. Опять же, не зная точно, когда начинается процесс обновления и когда вызывается процесс остановки, трудно определить проблему