FingerprintManager

Android M出了指纹验证,本文主要来介绍下Fingeprint。
Android锁屏解锁主要有几种方式:
Pattern
FingerprintManager_第1张图片
PIN
FingerprintManager_第2张图片
Password
FingerprintManager_第3张图片
现在新增了Fingerprint
FingerprintManager_第4张图片

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

下面来讲下主要的类:
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也没用。
FingerprintManager_第7张图片
第一个参数是用于通过指纹验证取出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,主要告诉是何种原因。
FingerprintManager_第8张图片
FingerprintManager_第9张图片

你可能感兴趣的:(android,指纹)