FingerprintManager

Android M出了指纹验证,本文主要来介绍下Fingeprint。
Android锁屏解锁主要有几种方式:
Pattern
这里写图片描述
PIN
这里写图片描述
Password
这里写图片描述
现在新增了Fingerprint
这里写图片描述

如果你想在Android6.0以上的手机添加指纹前,需要添加上述三种的任意一种。以免不能使用指纹时,可以采用其他方法打开手机。
这里写图片描述
这里写图片描述

下面来讲下主要的类:
FingerPrintManager—帮助访问指纹硬件的类
FingerPrintManager.AuthenticationCallback—在验证时传入该接口,通过该接口来返回验证指纹的结果
FingerPrintManager.AuthenticationResult—当指纹验证正确时,接口里返回的参数。
FingerPrintManager.CryptoObject—由FingerPrintManager支持的封装加密对象的类

如何使用指纹?
1.Check the permission—Manifest.Permission.USE_FINGERPRINT; –isNeed?
2.Detect the hardware—FingerPrintManager.isHardwareDetected();
3.Check the fingerprint—FingerPrintManager.hasEnrollFingerprints();
4.Authenticate the fingerprint—FingerPrintManager.authenticate(…);

在Android6.0上出了动态分配权限(Android6.0权限管理),但是指纹权限是默认分配的,所以按理来说是不用检查权限的,但是大家也知道Android系统定制的很多,可能有些系统不一定会默认分配指纹权限,所以以防万一还是检查下。。。
下面两步就是检查硬件是否支持、是否已经有指纹录入。
如果未检查上述两步直接去执行第四部,不会抛出异常,只是没有任何反应。
最后一步就是开始等待验证指纹。系统默认每段时间内验证指纹次数为5次,如果5次后还没验证成功,则关闭验证,并且30秒内不允许再次验证,即使你调api也没用。
这里写图片描述
第一个参数是用于通过指纹验证取出AndroidKeyStore中的key的对象,稍后描述。
第二个参数可以用来取消指纹验证,如果想手动关闭验证,可以调用该参数的cancel方法。
第三个参数没什么意义,就是传0就好了。
第四个参数最重要,由于指纹信息是存在系统硬件中的,app是不可以访问指纹信息的,所以每次验证的时候,系统会通过这个callback告诉你是否验证通过、验证失败等。
第四个参数是handler,fingerprint中的消息都通过这个handler来传递消息,如果你传空,则默认创建一个在主线程上的handler来传递消息,没什么用,0传null好了。
看个例子:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       Button  btnBuy = (Button) findViewById(R.id.btn_buy);
       FingerprintManager  fingerprintManager = getSystemService(FingerprintManager.class);
        btnBuy.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (fingerprintManager.isHardwareDetected() && fingerprintManager.hasEnrolledFingerprints()) {
                    fingerprintManager.authenticate(null, null, 0, callback, null);
                }
            }
        });
    }


private FingerprintManager.AuthenticationCallback callback = new FingerprintManager.AuthenticationCallback() {
    @Override
    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
         //指纹验证成功
         Toast.makeText(AuthenticationActivity.this, "onAuthenticationSucceeded()", Toast.LENGTH_SHORT).show();
        }
    @Override
    public void onAuthenticationError(int errorCode, CharSequence errString) {
         //指纹验证失败,不可再验
         Toast.makeText(AuthenticationActivity.this, "onAuthenticationError()"+ errString, Toast.LENGTH_SHORT).show();
        }
    @Override
    public void onAuthenticationHelp(int helpCode, CharSequence helpString) {
         //指纹验证失败,可再验,可能手指过脏,或者移动过快等原因。
         Toast.makeText(AuthenticationActivity.this, "onAuthenticationHelp()"+ helpString, Toast.LENGTH_SHORT).show();
        }
    @Override
    public void onAuthenticationFailed() {
         //指纹验证失败,指纹识别失败,可再验,该指纹不是系统录入的指纹。
         Toast.makeText(AuthenticationActivity.this, "onAuthenticationFailed():不能识别", Toast.LENGTH_SHORT).show();
        }
    };

Callback中有ErrorCode和HelpCode,主要告诉是何种原因。
这里写图片描述
这里写图片描述

指纹模组通常通过专用的驱动接口与主控芯片通信,这个过程涉及硬件底层操作和软件交互。在编写代码时,一般会使用特定的API(应用程序接口),比如AndroidFingerprintManager或者Windows的Windows Hello API。 以Android为例,指纹识别模块的常用代码片段可能会包括以下部分: ```java // 导入所需库 import android.hardware.fingerprint.FingerprintManager; public class FingerprintActivity extends AppCompatActivity { private FingerprintManager fingerprintManager; private FingerprintManager.CryptoObject cryptoObject; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); fingerprintManager = (FingerprintManager) getSystemService(FINGERPRINT_SERVICE); // 创建加密对象 KeyStore keystore = KeyStore.getInstance("AndroidKeyStore"); try { if (!keystore.isKey Stored("fingerprintkey")) { // 如果没有存储过的密钥,生成新的 KeystoreHelper.generateKey(keystore, "fingerprintkey", this); } cryptoObject = new Cryptography(new HmacSha256()); } catch (Exception e) { e.printStackTrace(); } // 请求解锁权限并开始扫描指纹 startActivityForResult(fingerprintManager.authenticate(cryptoObject, new CancellationSignal(), 0, null, null), 0); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 0) { switch (resultCode) { case FingerprintManager.CANCELLED_AUTHENTICATE: Toast.makeText(this, "取消了指纹认证", Toast.LENGTH_SHORT).show(); break; case FingerprintManager.AuthenticationError: Toast.makeText(this, "指纹认证出错: " + fingerprintManager.getAuthenticationError(), Toast.LENGTH_SHORT).show(); break; case FingerprintManager.SUCCESS: Toast.makeText(this, "指纹认证成功", Toast.LENGTH_SHORT).show(); // 这里可以处理指纹匹配后的操作 break; } } } } ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值