观心静

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

前言

  指纹识别功能在Android端已经被封装的十分简单,当然给予的功能也十分少你只能得到指纹是否识别成功或失败的回调。其实实际业务里你也没有需要很复杂的功能,这些基本满足了你确认当前设备是机主的密码锁功能。

另外,你需要知道在此博客的指纹识别只适用于Android 6.0 - Android 9.0 。

 

简单demo

  权限

<uses-permission android:name="android.permission.USE_FINGERPRINT"/>

  代码

 

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String TAG = MainActivity.class.getSimpleName();
    private FingerprintManagerCompat mFingerprintManagerCompat;
    private CancellationSignal mCancellationSignal;
    private TextView mTextView;
    private Button mAuthenticateBtn;
    private Button mCandleBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        mFingerprintManagerCompat = FingerprintManagerCompat.from(this);//初始化指纹管理区


    }

    private void initView() {
        mAuthenticateBtn = (Button) findViewById(R.id.authenticate_btn);
        mCandleBtn = (Button) findViewById(R.id.candle_btn);
        mAuthenticateBtn.setOnClickListener(this);
        mCandleBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.authenticate_btn:
                if (mFingerprintManagerCompat.isHardwareDetected()) {
                    Log.e(TAG, "检测到指纹设备");
                    if (mFingerprintManagerCompat.hasEnrolledFingerprints()){
                        fingerprintAuthenticate();
                        Log.e(TAG, "有指纹");
                        return;
                    }
                }
                Toast.makeText(this, "此设备没有指纹", Toast.LENGTH_SHORT).show();
                break;
            case R.id.candle_btn:
                if (mCancellationSignal != null){
                    mCancellationSignal.cancel();   //取消指纹认证请求
                }
                break;
        }
    }

    /**
     * 请求指纹认证
     */
    private void fingerprintAuthenticate() {
        //TODO 此处可以添加你的指纹认证提示对话框
        mCancellationSignal = new CancellationSignal(); //取消指纹认证操作类
        mCancellationSignal.setOnCancelListener(new CancellationSignal.OnCancelListener() {
            @Override
            public void onCancel() {
                //取消指纹认证回调
            }
        });
        /*
        下面这行代码就是认证请求操作,它一共有5个参数,这里说明下
        1. 与调用关联的对象;如果不需要,则为null。 不需要关注
        2.可选标志;应该是0 。 不需要关注
        3.可用于取消身份验证的对象的操作类
        4.回调接口
        5.接口回调线程Handler,默认主线程
         */
        mFingerprintManagerCompat.authenticate(null, 0, mCancellationSignal, new FingerprintManagerCompat.AuthenticationCallback() {
            @Override
            public void onAuthenticationError(int errMsgId, CharSequence errString) {
                super.onAuthenticationError(errMsgId, errString);
                //遇到不可恢复的错误并且操作完成时调用。 *不会在此对象上进行进一步的回调
                //另外主动取消认证后,也会在此处回调
                Log.e(TAG, "onAuthenticationError: 认证错误");
            }

            @Override
            public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
                super.onAuthenticationHelp(helpMsgId, helpString);
                //身份验证期间遇到可恢复的错误时调用。提供了帮助字符串,以向用户提供有关发生问题的指导,例如*“传感器脏污,请清洁它”
                Log.e(TAG, "onAuthenticationHelp: 认证帮助");
            }

            @Override
            public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
                super.onAuthenticationSucceeded(result);
                //成功识别指纹时调用
                Log.e(TAG, "onAuthenticationSucceeded: 认证成功");
            }

            @Override
            public void onAuthenticationFailed() {
                super.onAuthenticationFailed();
                //当指纹有效但未被识别时调用
                Log.e(TAG, "onAuthenticationFailed: 认证失败");
            }
        }, null);

    }
}

 

posted on 2020-02-21 14:36  观心静  阅读(700)  评论(0编辑  收藏  举报