最近做了一个功能,需要添加指纹识别;我们都知道指纹识别接口是Google在6.0及以后才提供了相关的接口,所以今天我们讨论的都是基于Android API开发版本大于等于23(6.0)且硬件支持的机型。其他不做讨论。
下面就来看看实现指纹识别究竟有多么简单,首先我先说一下实现方式,第一种是通过FingerPrintManager方式,还有一种是通过v4包的FingerPrintManagerCompat方式。下面就来看看实现流程:
(1)方式1
- 第一步:获取FingerPrintManager实例
FingerprintManager manager;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
manager = this.getSystemService(FingerprintManager.class);//方式1
//manager=(FingerprintManager)this.getSystemService(Context.FINGERPRINT_SERVICE);//方式2
}
- 第二步:开启指纹识别并添加识别结果回调接口
manager.authenticate(null, null, 0, new FingerprintManager.AuthenticationCallback() {
@Override
public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
Log.e(TAG, "FingerprintManager: 指纹识别成功");
}
@Override
public void onAuthenticationFailed() {
super.onAuthenticationFailed();
Log.e(TAG, "FingerprintManager: 指纹识别失败");
}
}, null);
(2)方式2
- 第一步:获取FingerPrintManagerCompat实例
FingerprintManagerCompat managerCompat;
managerCompat = FingerprintManagerCompat.from(this);
- 第二步:开启指纹识别并添加结果回调接口
managerCompat.authenticate(null, 0, null, new FingerprintManagerCompat.AuthenticationCallback() {
@Override
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
Log.e(TAG, "FingerprintManagerCompat: 指纹识别成功");
}
@Override
public void onAuthenticationFailed() {
super.onAuthenticationFailed();
Log.e(TAG, "FingerprintManagerCompat: 指纹识别失败");
}
}, null);
可见,两种方式很相似也很简单。更多关于其中参数和接口的细节可参见官方说明。注意需要添加一下权限,当然这个官方说明都是有的。
示例代码:
package com.hfut.operationfingerprint;
import android.Manifest;
import android.app.KeyguardManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Build;
import android.os.CancellationSignal;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
/**
* @author why
* @date 2019-1-8 11:50:02
*/
public class SimplifyActivity extends AppCompatActivity {
FingerprintManagerCompat managerCompat;
FingerprintManager manager;
private static final String TAG = "SimplifyActivitywhy";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simplify);
initData();
}
private void initData() {
managerCompat = FingerprintManagerCompat.from(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//6.0及以上
manager = this.getSystemService(FingerprintManager.class);
//manager= (FingerprintManager) this.getSystemService(Context.FINGERPRINT_SERVICE);
}
}
/**
* Test fingerprint identification
*
* @param view
*/
@RequiresApi(api = Build.VERSION_CODES.M)
public void fingerprintTest(View view) {
if (isSatisfactionFingerprint()) {
if (managerCompat.hasEnrolledFingerprints()) {
//TODO Start Fingerprint sensor and add result callback
managerCompat.authenticate(null, 0, null, new FingerprintManagerCompat.AuthenticationCallback() {
@Override
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
Log.e(TAG, "FingerprintManagerCompat: 指纹识别成功");
}
@Override
public void onAuthenticationFailed() {
super.onAuthenticationFailed();
Log.e(TAG, "FingerprintManagerCompat: 指纹识别失败");
}
}, null);
} else {
Log.d(TAG, "FingerprintManagerCompat: 请先采集指纹");
}
// if (manager.hasEnrolledFingerprints()) {
// //Log.e(TAG, "FingerprintManager: 实现指纹识别" );
// manager.authenticate(null, null, 0, new FingerprintManager.AuthenticationCallback() {
// @Override
// public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
// super.onAuthenticationSucceeded(result);
// Log.e(TAG, "FingerprintManager: 指纹识别成功");
// }
//
// @Override
// public void onAuthenticationFailed() {
// super.onAuthenticationFailed();
// Log.e(TAG, "FingerprintManager: 指纹识别失败");
// }
// }, null);
// }
// else {
// Log.d(TAG, "fingerprintTest: 请先采集指纹");
// }
}
}
/**
* @return
*/
public boolean isSatisfactionFingerprint() {
//permission
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Please grant authorization for fingerprint identification", Toast.LENGTH_LONG).show();
return false;
}
KeyguardManager mKeyguardManager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE);
if (!mKeyguardManager.isKeyguardSecure()) {
Toast.makeText(this, "Please open screen lock", Toast.LENGTH_LONG).show();
return false;
}
return true;
}
}
这部分写的很简单,仅仅作为参考作用。
注:欢迎扫码关注