Диалог запроса настроек местоположения с 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, что получатель не зарегистрирован. Есть идеи?

0 ответов

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