Android指纹识别的简单用法

指纹识别

Android指纹识别是在Android6.0(API23)之后加入的新特性,接口都在andoid.hardware.fingterprint包下,其中总共只有4个类,下面是简单的介绍一下;

FingerprintManger:主要用来协调管理和访问指纹识别硬件设备;
new FingerprintManager.AuthenticationCallback:这是一个回调接口,当指纹认证后系统会回调这个接口通知指纹认证的结果;
new FingerprintManager.AuthenticationResult:这是一个表示认证结果的类,会在回调接口中以参数给出 ;
FingerprintManager.CryptoObject这是一个加密的对象类,用来保证认证的安全性。

需要添加的权限:

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

开启扫描接口只需要调用FingerprintManger的authenticate方法即可,但是在此之前我们还有一些东西要做;


获取FingerprintManger的引用对象 :

manager = (FingerprintManager) this.getSystemService(Context.FINGERPRINT_SERVICE);
//获取钥匙管理者,后面用来获取用户是否开启安全模式
            mKeyManager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE);

在Android中使用指纹识别必须要在设备处于安全模式,即开启了锁屏密码,否则是不可以使用的;

//这里是判断是否添加权限以及设备是否支持指纹识别
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "没有指纹识别权限", Toast.LENGTH_SHORT).show();}

 //判断硬件是否支持指纹识别
            if (!manager.isHardwareDetected()) {
                Toast.makeText(this, "没有指纹识别模块", Toast.LENGTH_SHORT).show();}

//判断 是否开启锁屏密码

            if (!mKeyManager.isKeyguardSecure()) {
                Toast.makeText(this, "没有开启锁屏密码", Toast.LENGTH_SHORT).show();}

 //判断是否有指纹录入,没有的话只能去设置里面自己去录入了
            if (!manager.hasEnrolledFingerprints()) {
                Toast.makeText(this, "没有录入指纹", Toast.LENGTH_SHORT).show();}

到这里就可以开启扫描接口了,这里有一点,这里介绍一下authenticate方法中的参数;
第一个参数需要传入FingerprintManager.CryptoObject加密对象,但是在这里我是没有使用加密的,所以直接是设定的为null;
第二个参数是传入一个CancellationSignal对象,它提供了取消操作的功能,创建也很简单,使用 new CancellationSignal() 就可以了;
第三个参数可以不用理会,传入0就好(其实我也不知道具体作用 囧);
第四个参数就是回调接口了,就是上面提到的FingerprintManager.AuthenticationCallback()接口,提供识别成功失败等操作。


manager.authenticate(cryptoObject, mCancellationSignal, 0, new FingerprintManager.AuthenticationCallback() {
            @Override
            public void onAuthenticationError(int errorCode, CharSequence errString) {
                // 验证出错回调 指纹传感器会关闭一段时间,在下次调用authenticate时,会出现禁用期(时间依厂商不同30,1分都有)

                Toast.makeText(MainActivity.this, errString, Toast.LENGTH_SHORT).show();
                showAuthenticationScreen();
            }

            @Override
            public void onAuthenticationHelp(int helpCode, CharSequence helpString) {
                // 验证帮助回调
                Toast.makeText(MainActivity.this, helpString, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
                Toast.makeText(MainActivity.this, "指纹识别成功", Toast.LENGTH_SHORT).show();
                //识别成功关闭指纹验证
                if (mCancellationSignal != null) {
                    mCancellationSignal.cancel();
                    mCancellationSignal = null;
                }
            }

            @Override
            public void onAuthenticationFailed() {
                // 验证失败  指纹验证失败后,指纹传感器不会立即关闭指纹验证,系统会提供5次重试的机会,即调用5次onAuthenticationFailed后,才会调用onAuthenticationError

                Toast.makeText(MainActivity.this, "指纹识别失败", Toast.LENGTH_SHORT).show();
            }
        }, null);

到这里就可以简单的使用指纹识别功能了,因为还没有涉及到指纹加密;关于加密已经有很多好的博客了,我也还在研究中。

- Demo下载

你可能感兴趣的:(MyProject)