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();
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章