地点:FingerprintEnrollFindSensor.java //Android P
事件:通过指纹切到录入界面 FingerprintEnrollEnrolling.java
对比于Android N 这里不再支持NEXT按钮切到右边的界面。
那么指纹是如何切到右边的录入界面的呢?
进入左边界面在我们设置过强认证解锁的方式之后,就会获得非空的token(byte[]),直接调用 startLookingForFingerprint()
如果没有设置过强认证方式,则launch对象的设置界面要求设置,设置完成后,回到左边界面,会调用 startLookingForFingerprint()。
starLookingForFingerprint()的调用将让指纹开始工作。
private void startLookingForFingerprint() {
mSidecar = (FingerprintEnrollSidecar) getFragmentManager().findFragmentByTag(
FingerprintEnrollEnrolling.TAG_SIDECAR);
if (mSidecar == null) {
mSidecar = new FingerprintEnrollSidecar();
getFragmentManager().beginTransaction()
.add(mSidecar, FingerprintEnrollEnrolling.TAG_SIDECAR).commit();
}
//经过上面的逻辑,FingerprintEnrollSidecar这个fragment生命周期就开始了,接着导致enroll
//(token,....)被调用。指纹开始工作
mSidecar.setListener(new Listener() {//这是匿名内部类的方式实现接口方法,其实还有其他实现方式如在外部类中实现Listener这个接口
@Override
public void onEnrollmentProgressChange(int steps, int remaining) {
mNextClicked = true;
proceedToEnrolling(true /* cancelEnrollment */);
}
@Override
public void onEnrollmentHelp(CharSequence helpString) {
}
@Override
public void onEnrollmentError(int errMsgId, CharSequence errString) {
//fix: use the same fingerprint to go to enrolling page!
if (errString!=null)
Log.d("call back","onEnrollmentError proceedToEnrolling"+" errMsgId: "+errMsgId+" errString "+ errString.toString());
if (errString==null||errMsgId==FingerprintManager.FINGERPRINT_ERROR_UNABLE_TO_PROCESS)
proceedToEnrolling(false /* cancelEnrollment */);
else if (mNextClicked && errMsgId == FingerprintManager.FINGERPRINT