指纹解锁简单demo

最近项目需要一个指纹验证登录功能,所以就开始查找资料,做一总结。

首先需要加入权限:

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

这个权限是一个normal级别的,所以不需要再运行时加判断

下来就是我们要判断看你的设备是否支持指纹功能,没有的话那你还玩个啥是不,所以检测是必须的:

  • 1.设备是否支持指纹识别
  • 由于指纹api是在26之后加入的,所以先判断下这个。
  • 2.设备是否处于安全保护中(有指纹识别的手机,在使用指纹识别的时候,还需要强制设置密码或者图案解锁,如果未设置的话是不许使用指纹识别的
  • 3.设备是否已经注册过指纹(如果用户未使用过这个指纹技术,那么只能提示用户到系统设置里面去设置)
  • 具体代码如下:
  •  if (Build.VERSION.SDK_INT < 23) {
                Toast.makeText(this, "您的系统版本过低,不支持指纹功能", Toast.LENGTH_SHORT).show();
                return false;
            } else {
                KeyguardManager keyguardManager = getSystemService(KeyguardManager.class);
                FingerprintManager fingerprintManager = getSystemService(FingerprintManager.class);
                if (!fingerprintManager.isHardwareDetected()) {
                    Toast.makeText(this, "您的手机不支持指纹功能", Toast.LENGTH_SHORT).show();
                    return false;
                } else if (!keyguardManager.isKeyguardSecure()) {
                  PhoneInfoCheck.getInstance(this,"").startFingerprint();
                    Toast.makeText(this, "您还未设置锁屏,请先设置锁屏并添加一个指纹", Toast.LENGTH_SHORT).show();
                    return false;
                } else if (!fingerprintManager.hasEnrolledFingerprints()) {
                    PhoneInfoCheck.getInstance(this,"").startFingerprint();
                    Toast.makeText(this, "您至少需要在系统设置中添加一个指纹", Toast.LENGTH_SHORT).show();
                    return false;
                }
            }
            return true;

    下面我们来看指纹识别的api

  • //这种使用的是v4的兼容包,推荐使用这种
    FingerprintManagerCompat managerCompat = FingerprintManagerCompat.from(this);
    //这种是使用系统服务,但是必须要在sdk为23以上版本才行
    FingerprintManager fingerprintManager = (FingerprintManager)getSystemService(Context.FINGERPRINT_SERVICE);
    

    这里推荐使用第一种,这样才能向下兼容。

  • 调用 managerCompat.authenticate方式实现指纹识别,这个方法有5个参数,其中第三个是CancellationSignal,调用cancel 可以取消指纹识别。第四个为AuthenticationCallback,是识别之后的各种回调。

  • Google提供的与指纹识别相关的核心类不多,主类是FingerprintManager,主类依赖三个内部类,如下图所示: 

  • FingerprintManager主要提供三个方法如下:

  • FingerprintManager.AuthenticationCallback类提供的回调接口如下,重点区分红色下划线标注的部分

  • 启动指纹识别接口

  • 启动指纹识别

  • mFingerprintManager.authenticate(cryptoObject, mCancellationSignal, 0, mAuthCallback, null);

    参数意思参考文档说明,这里比较复杂的是创建CryptoObject对象,如果只是简单测试可以为null

  •  @TargetApi(23)
        private void initKey() {
            try {
                keyStore = KeyStore.getInstance("AndroidKeyStore");
                keyStore.load(null);
                KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
                KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(DEFAULT_KEY_NAME, KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT).setBlockModes(KeyProperties.BLOCK_MODE_CBC)
                        .setUserAuthenticationRequired(true).setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7);
                keyGenerator.init(builder.build());
                keyGenerator.generateKey();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }

    基本上大概就这些,之后我我会把我的demo放上去。附上下载链接:https://download.csdn.net/download/qq_22225183/11211920

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值