当我的应用程序遇到“尝试次数过多...”、身份验证错误 0x7、FINGERPRINT_ERROR_LOCKOUT 时,如果不循环调用 FingerprintManager.authenticate() 并获得锁定条件已清除的错误,我该如何判断?
问问题
1950 次
1 回答
2
查看系统 FingerprintService 的 AOSP 实现,实际上有一个广播意图在锁定期到期后发出。要查找的意图操作是com.android.server.fingerprint.ACTION_LOCKOUT_RESET
.
在您的 Activity 中,您可以注册一个广播接收器并等待此意图,如下所示:
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();
...
}
...
}
警告:这不是公共 API 的一部分,因此,此行为可能会随着以后的任何操作系统更新而改变。但我确实在牛轧糖上尝试过,它对我来说效果很好。
参考:
相关的 AOSP 代码是./frameworks/base/services/core/java/com/android/server/fingerprint/FingerprintService.java。在这个文件中,我们可以找到一个正在创建PendingIntent
的ACTION_LOCKOUT_RESET
意图:
private PendingIntent getLockoutResetIntent() {
return PendingIntent.getBroadcast(mContext, 0,
new Intent(ACTION_LOCKOUT_RESET), PendingIntent.FLAG_UPDATE_CURRENT);
}
此 PendingIntent 注册为在经过一段时间后被 AlarmManager 设置为关闭:
private void scheduleLockoutReset() {
mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + FAIL_LOCKOUT_TIMEOUT_MS, getLockoutResetIntent());
}
于 2016-12-14T23:12:07.033 回答