标签:
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,主要告诉是何种原因。
标签:
原文地址:http://blog.csdn.net/lintcgirl/article/details/51354250