天天看點

Android 指紋識别

參考别人的總結,簡單的實作了指紋識别的功能,下面做個小小的總結

簡單效果圖

Android 指紋識别

指紋識别的必要條件:僅支援API23及以上的系統,裝置必須帶有指紋識别功能

簡單的業務邏輯:

 1 判斷裝置的API是否大于22

  得到系統的API

minSdkVersion= Build.VERSION.SDK;           

 2 添加指紋識别權限

<uses-permission android:name="android.permission.USE_FINGERPRINT"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>           

 3 判斷裝置是否支援指紋識别

在開始判斷之前需要先通過V4包獲得對象

manager = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
keyManager= (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);

           

 判斷

//硬體裝置是否支援指紋解鎖功能
        if (!manager.isHardwareDetected()) {
            Toast.makeText(getBaseContext(), "該手機不支援指紋解鎖", Toast.LENGTH_SHORT).show();
            return false;
        }           

4 判斷裝置是否設定了鎖屏密碼

//判斷是否有鎖屏密碼
        if(!keyManager.isKeyguardSecure()){
            Toast.makeText(getBaseContext(), "請設定鎖屏密碼", Toast.LENGTH_SHORT).show();
            return false;
        }           

 5 判斷裝置是否錄入指紋,貌似APP無法直接喚醒指紋設定頁面

<pre name="code" class="java"> //判斷是否錄入指紋
        if (!manager.hasEnrolledFingerprints()) {
            Toast.makeText(getBaseContext(), "沒有錄入指紋", Toast.LENGTH_SHORT).show();
            return false;
        }           

 6 滿足以上條件開始識别指紋

參數分别是:防止第三方惡意攻擊的包裝類,CancellationSignal對象,flags,回調對象,handle

manager.authenticate(cryptoObject, signal, 0, callBack, null);           

 7 在回調函數裡做識别後邏輯處理

  回調函數的常用方法

@Override
            public void onAuthenticationError(int errorCode, CharSequence errString) {
                super.onAuthenticationError(errorCode, errString);
                    Toast.makeText(getBaseContext(), "操作過于頻繁,請稍後再試",Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAuthenticationHelp(int helpCode, CharSequence helpString) {
                super.onAuthenticationHelp(helpCode, helpString);
            }

            //指紋識别成功
            @Override
            public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
                super.onAuthenticationSucceeded(result);
                Toast.makeText(getBaseContext(), "指紋識别成功",Toast.LENGTH_SHORT).show();
                image.setImageResource(R.mipmap.yes);
            }

            //指紋識别失敗
            @Override
            public void onAuthenticationFailed() {
                super.onAuthenticationFailed();
                Toast.makeText(getBaseContext(), "指紋識别失敗", Toast.LENGTH_SHORT).show();
                i++;
                if(i==3){
                    Toast.makeText(getBaseContext(), "失敗次數過多,請輸入鎖屏密碼", Toast.LENGTH_SHORT).show();
                    showLockScreenPass();
                    i=0;
                }
            }
        };           

 8 如果識别失敗次數過多,則轉入輸入解鎖密碼界面

/**
     *指紋識别錯誤次數過多,顯示手機鎖屏密碼
     */
    private void showLockScreenPass() {
        Intent intent=keyManager.createConfirmDeviceCredentialIntent("finger","開啟鎖屏密碼");
        if(intent!=null){
            startActivityForResult(intent, REQUST_CODE);
        }
    }           

技術欠佳,有問題歡迎指出哦!

源碼下載下傳位址:

http://download.csdn.net/detail/huiling815/9624163