Kiedy moja aplikacja uderza w "Zbyt wiele prób ...", błąd uwierzytelniania 0x7, FINGERPRINT_ERROR_LOCKOUT, jak mogę stwierdzić bez wywoływania funkcji FingerprintManager.authenticate() w pętli i otrzymania błędu, że warunek blokady został wyczyszczony?Jak programowo określić, kiedy wygasło hasło FINGERPRINT_ERROR_LOCKOUT w Android FIngerprintManager?
Jak programowo określić, kiedy wygasło hasło FINGERPRINT_ERROR_LOCKOUT w Android FIngerprintManager?
Odpowiedz
Patrząc na wdrożenie systemu FingerprintService w systemie AOSP, faktycznie istnieje zamiar transmisji wysyłany po upływie okresu blokady. Intencją działania jest com.android.server.fingerprint.ACTION_LOCKOUT_RESET
.
W swojej działalności, można zarejestrować odbiornik rozgłaszania i czekać na tej intencji, tak jak poniżej:
public class MyActivity extends Activity {
...
private static final String ACTION_LOCKOUT_RESET =
"com.android.server.fingerprint.ACTION_LOCKOUT_RESET";
private final BroadcastReceiver mLockoutReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (ACTION_LOCKOUT_RESET.equals(intent.getAction())) {
doWhateverYouNeedToDoAfterLockoutHasBeenReset();
}
}
};
private void registerLockoutResetReceiver() {
Intent ret = getContext().registerReceiver(mLockoutReceiver, new IntentFilter(ACTION_LOCKOUT_RESET),
null, null);
}
public void onCreate(Bundle savedInstanceState) {
registerLockoutResetReceiver();
...
}
...
}
UWAGA: ten nie jest częścią publicznych API, więc takie zachowanie może się zmienić z dowolna późniejsza aktualizacja systemu operacyjnego. Ale spróbowałem tego na Nougacie i działa to całkiem dobrze.
referencyjny:
Odpowiedni kod AOSP jest ./frameworks/base/services/core/java/com/android/server/fingerprint/FingerprintService.java. W tym pliku, możemy znaleźć PendingIntent
ze związkiem ACTION_LOCKOUT_RESET
intencją tworzone:
private PendingIntent getLockoutResetIntent() {
return PendingIntent.getBroadcast(mContext, 0,
new Intent(ACTION_LOCKOUT_RESET), PendingIntent.FLAG_UPDATE_CURRENT);
}
Ten PendingIntent jest zarejestrowany do wyruszył po pewnym upływu czasu przez AlarmManager:
private void scheduleLockoutReset() {
mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + FAIL_LOCKOUT_TIMEOUT_MS, getLockoutResetIntent());
}
Próbowałem tego, ale po odebraniu transmisji urządzenie linii papilarnych nie reaguje na skanowanie odcisków palców. Musiałem ponownie uruchomić działanie, aby ponownie przeskanować. Ktoś widzi podobny problem? –
@JeffreyLiu Po zablokowaniu, musisz ponownie uruchomić menedżera urządzeń linii papilarnych. – hopia
Jak ponownie uruchomić? @hopia –
- 1. ORA-28001: hasło wygasło
- 2. Hasło użytkownika systemu wygasło.
- 3. Android - Jak określić wagę programowo dla RelativeLayout?
- 4. Zmiana SQL Developer po ORA-28001 hasło wygasło
- 5. Active Directory (LDAP) - sprawdź konto zablokowane/hasło wygasło
- 6. Jak określić hasło klucza za pomocą javax.net.ssl?
- 7. Ustawianie wartości nagłówka HTTP "wygasło" programowo w asp.net
- 8. Jak określić adUnitId programowo dla AdMob?
- 9. Jak programowo określić nazwę CKEditor przykład
- 10. Jak programowo określić zakres komponentu bean?
- 11. Jak określić, kiedy układ został narysowany?
- 12. Jak mogę programowo określić mój typ procesora?
- 13. Określić, kiedy ViewPager zmienia strony
- 14. Określić, kiedy wideo zakończyło buforowanie
- 15. Jak programowo zapomnieć o sieci bezprzewodowej w systemie Android?
- 16. Programowo określić liczbę uderzeń w chińskim znaku?
- 17. Jak określić nazwę użytkownika i hasło po naciśnięciu przycisku dokowania?
- 18. SMJobBless - dokumentacja, kiedy prosi o hasło administratora
- 19. Android - Jak stwierdzić, kiedy MediaPlayer buforuje
- 20. Jak programowo programowo uwzględnić biblioteki w projekcie Android?
- 21. Jak programowo określić bieżące ustawienie Bazy opcji w VBA
- 22. członkostwo asp.net - jak określić programowo użytkownik jest w roli
- 23. jak ustawić typ wejściowy jako hasło do edytowania editekstowego programowo
- 24. Jak określić, kiedy moja aplikacja ma zostać zakończona w tle?
- 25. Jak określić, kiedy kwerenda została wykonana pomyślnie w PHP PDO?
- 26. Android: Jak programowo ustawić drawablePadding?
- 27. Android: jak programowo znaleźć nazwę wersji Android?
- 28. Google zawsze zwraca wygasło znacznik ID (JWT)
- 29. Android jak ustawić windowanimation programowo
- 30. Jak programowo utworzyć menu w systemie Android?
Wśród wielu rzeczy, próbował próbował wywołać 'hasEnrolledFingerprints()' i 'isHardwareDetected()' podczas okresu blokady, aby sprawdzić, czy zwróci lub wyrzuci wyjątek. Nie ma szczęścia, te połączenia działają zgodnie z oczekiwaniami. – neuman8
Czy znalazłeś rozwiązanie tego problemu? Chciałbym również poznać pozostały czas blokady i czy urządzenie jest zablokowane przed wywołaniem funkcji authenticate(). – Niels
@Niels Nie śledziłem tego dłużej, ale szybkie przejrzenie najnowszej wersji kodu źródłowego FingerprintManager.java pokazuje mi coś takiego: 'public static abstract class LockoutResetCallback { // Wywoływane, gdy upłynął okres blokady, a klienci są dozwoleni ponownie słuchać odcisków palców. public void onLockoutReset() {} } ' – neuman8