Android R 指纹录入流程

Android R 指纹录入流程

android指纹录入的入口在设置界面。设置特殊锁屏(Pattern, Pin, Password)之后可以录入指纹。
在这里插入图片描述

1.FingerprintEnrollIntroduction.java

首先会看到一个引导界面就是 FingerprintEnrollIntroduction类(图1)。

// packages\apps\Settings\src\com\android\settings\biometrics\fingerprint\FingerprintEnrollIntroduction.java
public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
   

    private static final String TAG = "FingerprintIntro";

    private FingerprintManager mFingerprintManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        mFingerprintManager = Utils.getFingerprintManagerOrNull(this);

        mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class);
        //添加skip按钮 点击后调用onCancelButtonClick方法
        mFooterBarMixin.setSecondaryButton(
                new FooterButton.Builder(this)
                        .setText(R.string.security_settings_face_enroll_introduction_cancel)
                        .setListener(this::onCancelButtonClick)
                        .setButtonType(FooterButton.ButtonType.SKIP)
                        .setTheme(R.style.SudGlifButton_Secondary)
                        .build()
        );
        //添加下一步按钮 这个点击后调用onNextButtonClick方法
        mFooterBarMixin.setPrimaryButton(
                new FooterButton.Builder(this)
                        .setText(R.string.wizard_next)
                        .setListener(this::onNextButtonClick)
                        .setButtonType(FooterButton.ButtonType.NEXT)
                        .setTheme(R.style.SudGlifButton_Primary)
                        .build()
        );
    }
}

onNextButtonClick 和 onCancelButtonClick 是在BiometricEnrollIntroduction 中定义。

// packages\apps\Settings\src\com\android\settings\biometrics\BiometricEnrollIntroduction.java
public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
        implements LinkSpan.OnClickListener {
   
        
    @Override
    protected void onNextButtonClick(View view) {
   
        mNextClicked = true;
        // 判断是否达到最大录入指纹数量 
        if (checkMaxEnrolled() == 0) {
   
            // Lock thingy is already set up, launch directly to the next page
            // 没达到上限
            launchNextEnrollingActivity(mToken);
        } else {
   
            setResult(RESULT_FINISHED);
            finish();
        }
    }

    // 点击后退出
    protected void onCancelButtonClick(View view) {
   
        finish();
    }

    //启动下个录入环节的Activity
    private void launchNextEnrollingActivity(byte[] token) {
   
        // getEnrollingIntent()是一个抽象方法 被子类实现
        Intent intent = getEnrollingIntent();
        if (token != null) {
   
            intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
        }
        if (mUserId != UserHandle.USER_NULL) {
   
            intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
        }
        intent.putExtra(EXTRA_FROM_SETTINGS_SUMMARY, mFromSettingsSummary);
        startActivityForResult(intent, BIOMETRIC_FIND_SENSOR_REQUEST);
    }
}

getEnrollingIntent()在其子类 FingerprintEnrollIntroduction中实现

    @Override
    protected Intent getEnrollingIntent() {
   
        return new Intent(this, FingerprintEnrollFindSensor.class);
    }

启动FingerprintEnrollFindSensor这个Activity

2.FingerprintEnrollFindSensor.java

这个Activity就是图2界面所显示的Activity。

//packages\apps\Settings\src\com\android\settings\biometrics\fingerprint\FingerprintEnrollFindSensor.java
public class FingerprintEnrollFindSensor extends BiometricEnrollBase {
   

    @Nullable
    private FingerprintFindSensorAnimation mAnimation;

    private FingerprintEnrollSidecar mSidecar;
    private boolean mNextClicked;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(getContentView());
        mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class);
        mFooterBarMixin.setSecondaryButton(
                new FooterButton.Builder(this)
                        .setText(R.string.skip_label)
                        .setListener(this::onSkipButtonClick)
                        .setButtonType(FooterButton.ButtonType.SKIP)
                        .setTheme(R.style.SudGlifButton_Secondary)
                        .build()
        );

        setHeaderText(R.string.security_settings_fingerprint_enroll_find_sensor_title);
        // 监听指纹器件
        startLookingForFingerprint(); // already confirmed, so start looking for fingerprint

        View animationView = findViewById(R.id.fingerprint_sensor_location_animation);
        if (animationView instanceof FingerprintFindSensorAnimation) {
   
            mAnimation = (FingerprintFindSensorAnimation) animationView;
        } else {
   
            mAnimation = null;
        }
    }
    
    private void startLookingForFingerprint() {
   
        mSidecar = (FingerprintEnrollSidecar) getSupportFragmentManager().findFragmentByTag(
                FingerprintEnrollEnrolling.TAG_SIDECAR);
        if (mSidecar == null) {
   
            mSidecar = new FingerprintEnrollSidecar();
            getSupportFragmentManager().beginTransaction()
                    .add(mSidecar, FingerprintEnrollEnrolling.TAG_SIDECAR)
                    .commitAllowingStateLoss();
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值