android指纹java_简单的指纹功能使用(android 6.0之后的)

本文介绍了如何在Android 6.0及以上版本中使用`FingerprintManagerCompat`进行指纹识别。首先,需要添加使用指纹权限,然后获取指纹管理对象。接着,检查设备是否支持指纹识别及是否有保存过的指纹信息。通过`FingerprintManagerCompat.authenticate()`方法进行指纹验证,并处理各种错误情况。最后,展示了一个简单的指纹验证点击事件的处理流程。
摘要由CSDN通过智能技术生成

//1.1.添加使用指纹权限

//2.获取指纹管理对象

//v4包下的API,包装内部已经判断Android系统版本是否大于6.0,这也是官方推荐的方式

FingerprintManagerCompat fingerprint = FingerprintManagerCompat.from(this);

//3.判断设备是否支持 判断设备是否保存过指纹信息

//第一步 判断设备是否支持指纹

boolean ishardwareDetected = fingerprint.isHardwareDetected();

判断设备是否以保存过指纹信息,至少需要保存过一个

boolean hasfingerprint = fingerprint.hasEnrolledFingerprints();

//取消验证使用 CancellationSignal cancel = new CancellationSignal();

cancel.cacel();

//以下是代码

public class FingerprintActivity extends AppCompatActivity {

private CancellationSignal cancel;

Handler handler;

private FingerprintDialog fingerprintDialog;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_fingerprint);

}

//对应不同的错误,可以有不同的操作

private void handleErrorCode(int code) {

switch (code) {

case FingerprintManager.FINGERPRINT_ERROR_CANCELED:

//todo 指纹传感器不可用,该操作被取消

Log.d("指纹测试", "指纹传感器不可用,该操作被取消");

break;

case FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE:

//todo 当前设备不可用,请稍后再试

Log.d("指纹测试", "当前设备不可用,请稍后再试");

break;

case FingerprintManager.FINGERPRINT_ERROR_LOCKOUT:

//todo 由于太多次尝试失败导致被锁,该操作被取消

Log.d("指纹测试", "当前设备不可用,请稍后再试");

break;

case FingerprintManager.FINGERPRINT_ERROR_NO_SPACE:

//todo 没有足够的存储空间保存这次操作,该操作不能完成

Log.d("指纹测试", "没有足够的存储空间保存这次操作,该操作不能完成");

break;

case FingerprintManager.FINGERPRINT_ERROR_TIMEOUT:

//todo 操作时间太长,一般为30秒

Log.d("指纹测试", "操作时间太长,一般为30秒");

break;

case FingerprintManager.FINGERPRINT_ERROR_UNABLE_TO_PROCESS:

//todo 传感器不能处理当前指纹图片

Log.d("指纹测试", "传感器不能处理当前指纹图片");

break;

}

}

public void fingerPrintClick(View view) {

//获取指纹管理器

v4包下的API,包装内部已经判断Android系统版本是否大于6.0,这也是官方推荐的方式

FingerprintManagerCompat fingerprint = FingerprintManagerCompat.from(this);

//FingerprintManager fingerprint2 = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE); //Android 6.0包下的API

FingerprintManager fingerprint2 = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);

//第一步 判断设备是否支持指纹

boolean ishardwareDetected = fingerprint.isHardwareDetected();

判断设备是否以保存过指纹信息,至少需要保存过一个

boolean hasfingerprint = fingerprint.hasEnrolledFingerprints();

/**

* @param crypto object associated with the call or null if none required. //不太理解,加密指纹特征还是什么,可以不加密置为null

* @param flags optional flags; should be 0 //设置标记,暂时无用

* @param cancel an object that can be used to cancel authentication //取消验证

* @param callback an object to receive authentication events //系统认证完成之后,回调该接口

* @param handler an optional handler for events //处理callback接口后,界面的处理,默认是主线程handler

*/

cancel = new CancellationSignal();

fingerprint.authenticate(null, 0, cancel, new FingerprintManagerCompat.AuthenticationCallback() {

@Override

public void onAuthenticationError(int errMsgId, CharSequence errString) {

super.onAuthenticationError(errMsgId, errString);

//验证错误时,回调该方法。当连续验证5次错误时,将会走onAuthenticationFailed()方法

handler.obtainMessage(1, errMsgId, 0).sendToTarget();

}

@Override

public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {

super.onAuthenticationSucceeded(result);

//验证成功时,回调该方法。fingerprint对象不能再验证

handler.obtainMessage(2).sendToTarget();

}

@Override

public void onAuthenticationFailed() {

super.onAuthenticationFailed();

//验证失败时,回调该方法。fingerprint对象不能再验证并且需要等待一段时间才能重新创建指纹管理对象进行验证

handler.obtainMessage(3).sendToTarget();

}

}, handler = new Handler(getMainLooper()) {

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case 1: //验证错误

//todo 界面处理

handleErrorCode(msg.arg1);

Toast.makeText(FingerprintActivity.this, "验证错误", Toast.LENGTH_SHORT).show();

break;

case 2: //验证成功

//todo 界面处理

cancel = null;

Toast.makeText(FingerprintActivity.this, "验证成功", Toast.LENGTH_SHORT).show();

fingerprintDialog.dismiss();

break;

case 3: //验证失败

//todo 界面处理

cancel = null;

Toast.makeText(FingerprintActivity.this, "验证失败", Toast.LENGTH_SHORT).show();

break;

default:

super.handleMessage(msg);

}

}

});

fingerprintDialog = new FingerprintDialog(this);

fingerprintDialog.show();

fingerprintDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {

@Override

public void onDismiss(DialogInterface dialog) {

if (cancel != null)

//取消验证

cancel.cancel();

cancel = null;

}

});

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值