Android pay 指纹


Android pay是Android支付统一的标准,Android 6.0 系统集成了Android pay ,其特性简洁.安全.可选性,虽然许多手机厂商Android手机支持了指纹功能,
但是这些手机都使用了非谷歌认证的技术.这次谷歌提供了指纹识别,统一了技术方案. 这也是为啥6.0以下都有指纹功能 ,Android指纹识别API没有识别的原因.

import android.app.KeyguardManager;
import android.os.Build;
import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;
import android.support.v4.os.CancellationSignal;

import com.zlzf.zlzfcpay.MyApp;


public class FingerprintUtil {
    public static CancellationSignal cancellationSignal;



    public static  void callFingerPrint(final OnCallBackListenr listener){
        FingerprintManagerCompat managerCompat = FingerprintManagerCompat.from(MyApp.context);
        if (!managerCompat.isHardwareDetected()){ //判断设备是否支持
            if (listener != null)
                listener.onSupportFailed();
            return;
        }
        KeyguardManager keyguardManager =(KeyguardManager)MyApp.context.getSystemService(MyApp.context.KEYGUARD_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            if (!keyguardManager.isKeyguardSecure()) {//判断设备是否处于安全保护中
                if (listener != null)
                listener.onInsecurity();
                return;
            }
        }
        if (!managerCompat.hasEnrolledFingerprints()){ //判断设备是否已经注册过指纹
            if (listener != null)
                listener.onEnrollFailed(); //未注册
            return;
        }
        if (listener != null)
            listener.onAuthenticationStart(); //开始指纹识别
        cancellationSignal  = new CancellationSignal(); //必须重新实例化,否则cancel 过一次就不能再使用了
        managerCompat.authenticate(null,0,cancellationSignal,new FingerprintManagerCompat.AuthenticationCallback(){
             // 当出现错误的时候回调此函数,比如多次尝试都失败了的时候,errString是错误信息,比如华为的提示就是:尝试次数过多,请稍后再试。
             @Override
             public void onAuthenticationError(int errMsgId, CharSequence errString) {
                 if (listener != null)
                     listener.onAuthenticationError(errMsgId ,errString );
             }

             // 当指纹验证失败的时候会回调此函数,失败之后允许多次尝试,失败次数过多会停止响应一段时间然后再停止sensor的工作
             @Override
             public void onAuthenticationFailed() {
                 if (listener != null)
                     listener.onAuthenticationFailed();
             }

             @Override
             public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
                 if (listener != null)
                     listener.onAuthenticationHelp(helpMsgId,helpString);
             }

             // 当验证的指纹成功时会回调此函数,然后不再监听指纹sensor
             @Override
             public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
                 if (listener != null)
                     listener.onAuthenticationSucceeded(result);
             }
         ;
        },null);

    }
    public interface  OnCallBackListenr{
        void onSupportFailed();
        void onInsecurity();
        void onEnrollFailed();
        void onAuthenticationStart();
        void onAuthenticationError(int errMsgId, CharSequence errString);
        void onAuthenticationFailed();
        void onAuthenticationHelp(int helpMsgId, CharSequence helpString);
        void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result);
    }

    public static  void cancel(){
        if (cancellationSignal != null)
            cancellationSignal.cancel();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_37599041/article/details/80322537