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

博客地址https://moxiaofengm.gitee.io/blog/

 

//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、付费专栏及课程。

余额充值