Как добавить запрос biometri c перед тем, как пользователь получит доступ к настройкам моего приложения? - PullRequest
0 голосов
/ 03 августа 2020

Я использую предоставленные android настройки androidx библиотеку , и мне не удается добавить биометрические данные в одну из моих настроек. Я также использую библиотеку androidx biometri c . Способ android обрабатывает результаты биометрии через обратные вызовы. Это проблема c, потому что я пытаюсь добавить биометрию c путем переопределения fun onPreferenceTreeClick(preference: Preference?): Boolean. Если я создам здесь приглашение biometri c, я не смогу остановить нажатие этой опции, потому что сразу после создания моего приглашения biometri c android не будет ждать его завершения sh и вместо этого обработает его по его обратному вызову. Как мне добавить биометрию в свои настройки? Не существует переопределяемого метода, который позволял бы это (насколько мне известно), и нет способа сделать это с помощью библиотеки biometri c.

1 Ответ

0 голосов
/ 03 августа 2020

В итоге я решил эту проблему, изначально отклонив новое изменение и сохранив значение позже, чтобы использовать его, если пользователь передал биометрические данные. Если пользователь потерпел неудачу, ничего не должно было произойти, потому что я изначально отклонил изменение. Но если бы пользователь передал обратный вызов, я бы внес изменения. Хотя это кажется единственным логическим вариантом для SwitchPreference, это не было очевидно при выполнении ListPreference.

В моей конкретной реализации c я добавил onPreferenceChangeListener

findPreference<Preference>(BIOMETRIC_OPTION_KEY)?.setOnPreferenceChangeListener { preference, newValue ->
            if (newValue is String) {
                performBiometricFlow(preference.key, newValue)
            }

            false
        }

performBiometricFlow с именем диалоговое окно биометрических данных библиотека , а в обратном вызове я запустил функцию, которая определяла, что нажимается (на основе ключа), и запускала соответствующую функцию. В этом случае было выбрано диалоговое окно параметров biometri c, и если оно прошло, оно запустило бы это

private fun changeBiometricPreference(newValue: String) {
    findPreference<ListPreference>(BIOMETRIC_OPTION_KEY)?.value = newValue
}

. Эта часть сохраняет новое значение, которое изначально предполагалось сохранить, путем нахождения ListPreference и его переназначения. .

...