我是靠谱客的博主 故意板凳,最近开发中收集的这篇文章主要介绍Android使用指纹识别功能,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

指纹识别是在Android 6.0以后新增的功能,在使用的时候需要先判断手机的系统版本是否支持指纹识别。

AndroidManifest添加权限
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
验证手机是否支持指纹功能
  • FingerprintManager : 指纹管理类
public boolean supportFingerprint() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            FingerprintManager fingerprintManager = Application.getContext().getSystemService(FingerprintManager.class);
            if (fingerprintManager != null && !fingerprintManager.isHardwareDetected()) {
                return false;
            }
        } else {
            return false;
        }
        return true;
}

根据系统版本 < 23, 提示用户手机系统版本过低,不支持指纹功能
FingerprintManager.isHardwareDetected() 是否有指纹硬件
FingerprintManager.hasEnrolledFingerprints() 是否有录入的指纹,提示用户跳转到系统设置录入指纹

指纹识别关键方法 authenticate

指纹识别中最关键的方法,调起指纹识别扫描器进行指纹识别

FingerprintManager.authenticate(CryptoObject crypto, CancellationSignal cancel, int flags, AuthenticationCallback callback, Handler handler);

FingerprintManager.authenticate(null, null, 0, new FingerAuthenticateCallBack(), null);
指纹验证结果回调
public class FingerAuthenticateCallBack extends FingerprintManager.AuthenticationCallback{
    private String TAG = "FingerAuthenticateCallBack";
    // 指纹验证多次错误的时候回调方法,多次尝试都失败了的时候,errString为错误信息
    @Override
    public void onAuthenticationError(int errMsgId, CharSequence errString) {
        Log.d(TAG, "onAuthenticationError: " + errString);
    }

    // 当指纹验证失败的时候会回调此方法
    @Override
    public void onAuthenticationFailed() {
        Log.d(TAG, "onAuthenticationFailed: 验证失败");
    }
	//	在认证期间遇到可恢复的错误时调用,比如手指移到太快指纹传感器可能只采集了部分的信息
    @Override
    public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
        Log.d(TAG, "onAuthenticationHelp: " + helpString);
    }

    // 当验证的指纹成功时会回调此函数
    @Override
    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
        super.onAuthenticationSucceeded(result);
        Log.d(TAG, "onAuthenticationSucceeded: " + "验证成功");
    }
}

2020-08-06 16:43:04.204 783-783 D/FingerAuthenticateCallBack: onAuthenticationFailed: 验证失败
2020-08-06 16:43:10.113 783-783 D/FingerAuthenticateCallBack: onAuthenticationHelp: 手指移动太快,请重试。
2020-08-06 16:43:13.464 783-783 D/FingerAuthenticateCallBack: onAuthenticationFailed: 验证失败
2020-08-06 16:43:15.626 783-783 D/FingerAuthenticateCallBack: onAuthenticationSucceeded: 验证成功

FingerprintManager虽然标为废弃,但还是可以正常使用的。


BiometricPrompt 生物识别

在AndroidP(9.0)时候,官方不再推荐使用FingerprintManager,标记为@Deprecated,开放BiometricPrompt新的API

AndroidManifest添加权限
<uses-permission android:name="android.permission.USE_BIOMETRIC" />

指纹识别关键方法 authenticate

BiometricPrompt.authenticate(CancellationSignal cancel,CallbackExecutor Executor executor,AuthenticationCallback callback)
用于调起指纹识别扫描器进行指纹识别

	BiometricPrompt biometricPrompt = new BiometricPrompt.Builder(this)
                .setTitle("指纹验证")
                .setNegativeButton("使用密码验证", getMainExecutor(), new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.d("TAG", "cancel");
                    }
                })
                .build();
                
	BiometricPrompt.AuthenticationCallback authenticationCallback = new BiometricPrompt.AuthenticationCallback() {
            @Override
            public void onAuthenticationError(int errorCode, CharSequence errString) {
                super.onAuthenticationError(errorCode, errString);
                Log.d("TAG", "onAuthenticationError errorCode: " + errorCode + " errString: " + errString);
            }

            @Override
            public void onAuthenticationHelp(int helpCode, CharSequence helpString) {
                super.onAuthenticationHelp(helpCode, helpString);
                Log.d("TAG", "onAuthenticationHelp helpCode:" + helpCode + "helpString: " + helpString);
            }

            @Override
            public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
                super.onAuthenticationSucceeded(result);
                Log.d("TAG", "验证成功");
            }

            @Override
            public void onAuthenticationFailed() {
                super.onAuthenticationFailed();
                Log.d("TAG", "onAuthenticationFailed");
            }
        };
	biometricPrompt.authenticate(new CancellationSignal(), getMainExecutor(), authenticationCallback);

CancellationSignal用来在指纹识别器扫描用户指纹的是时候取消当前的扫描操作,如果不取消的话,指纹扫描器会一直扫描直到超时同时也会比较耗电。

CancellationSignal.cancel()方法用于取消指纹识别器扫描

Android P(9.0) 系统提供指纹识别框

相比Android 6.0 指纹识别框可以自定义,而9.0不允许开发者自定义指纹识别框

picture

前面调起指纹识别扫描器的各个回调方法介绍过了
BiometricPrompt.authenticate()其实跟FingerprintManager.authenticate()基本类似


也是最近需要用到指纹识别的功能,才了解的。
希望对有需要的小伙伴有帮助~

最后

以上就是故意板凳为你收集整理的Android使用指纹识别功能的全部内容,希望文章能够帮你解决Android使用指纹识别功能所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部