Диалог запроса настроек местоположения с FusedLocationProviderClient, показанный дважды
В моем приложении я использую Google FusedLocationProviderClient
, чтобы получить доступ к местоположению устройства. Запрос моего местоположения PRIORITY
является HIGH_ACCURACY
и я зарегистрировал BroadcastReceiver
получать обновления, когда этот приоритет-LOCATION MODE
изменения. Что я знаю, это:
if (LocationManager.MODE_CHANGED_ACTION.equals(intent.getAction())) {
int s = 0;
try {
s = Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE);
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
if (s != Settings.Secure.LOCATION_MODE_HIGH_ACCURACY) {
checkForProperLocationSettings();
}
}
Проблема, если я иду, вручную, из LOCATION_MODE_HIGH_ACCURACY
в LOCATION_MODE_BATTERY_SAVING
а потом LOCATION_MODE_OFF
диалоговое окно, которое просит пользователя принять желаемые настройки местоположения, отображается дважды. Код для этого диалога такой же, как и в документации:
task.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
if (e instanceof ResolvableApiException) {
// Location settings are not satisfied, but this can be fixed
// by showing the user a dialog.
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
ResolvableApiException resolvable = (ResolvableApiException) e;
resolvable.startResolutionForResult(BaseActivity.this,
C.REQUEST_CHECK_LOCATION_SETTINGS);
} catch (IntentSender.SendIntentException sendEx) {
// Ignore the error.
}
}
}
});
Я попытался отменить регистрацию получателя, но я получил IllegalArgumentException
, что получатель не зарегистрирован. Есть идеи?