亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用Android6.0怎么實現一個指紋識別功能

發布時間:2020-12-03 15:28:12 來源:億速云 閱讀:131 作者:Leah 欄目:移動開發

本篇文章為大家展示了利用Android6.0怎么實現一個指紋識別功能,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

Android6.0指紋識別開發實例詳解

谷歌在android6.0及以上版本對指紋識別進行了官方支持。當時在FingerprintManager和FingerprintManagerCompat這兩個之間糾結,其中使用FingerprintManager要引入com.android.support:appcompat-v7包,考慮到包的大小,決定使用v4兼容包FingerprintManagerCompat來實現。

主要實現的工具類FingerprintUtil:驗證手機是否支持指紋識別方法callFingerPrintVerify(),主要驗證手機硬件是否支持(6.0及以上),有沒有錄入指紋,然后有沒有開啟鎖屏密碼,開始驗證對于識別成功,失敗可以進行相應的回調處理。

實例代碼:

 public class FingerprintUtil{

 private FingerprintManagerCompat mFingerprintManager;
 private KeyguardManager mKeyManager;
 private CancellationSignal mCancellationSignal;
 private Activity mActivity;

 public FingerprintUtil(Context ctx) {
  mActivity = (Activity) ctx;
  mFingerprintManager = FingerprintManagerCompat.from(mActivity);
  mKeyManager = (KeyguardManager) mActivity.getSystemService(Context.KEYGUARD_SERVICE);

 }

 public void callFingerPrintVerify(final IFingerprintResultListener listener) {
  if (!isHardwareDetected()) {
   return;
  }
  if (!isHasEnrolledFingerprints()) {
   if (listener != null) {
    listener.onNoEnroll();
   }
   return;
  }
  if (!isKeyguardSecure()) {
   if (listener != null) {
    listener.onInSecurity();
   }
   return;
  }
  if (listener != null) {
   listener.onSupport();
  }

  if (listener != null) {
   listener.onAuthenticateStart();
  }
  if (mCancellationSignal == null) {
   mCancellationSignal = new CancellationSignal();
  }
  try {
   mFingerprintManager.authenticate(null, 0, mCancellationSignal, new FingerprintManagerCompat.AuthenticationCallback() {
    //多次嘗試都失敗會走onAuthenticationError,會停止響應一段時間,提示嘗試次數過多,請稍后再試。
    @Override
    public void onAuthenticationError(int errMsgId, CharSequence errString) {
     if (listener != null)
      listener.onAuthenticateError(errMsgId, errString);
    }

    //指紋驗證失敗走此方法,例如小米前4次驗證失敗走onAuthenticationFailed,第5次走onAuthenticationError
    @Override
    public void onAuthenticationFailed() {
     if (listener != null)
      listener.onAuthenticateFailed();
    }

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

    }

    //當驗證的指紋成功時會回調此函數,然后不再監聽指紋sensor
    @Override
    public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
     if (listener != null)
      listener.onAuthenticateSucceeded(result);
    }

   }, null);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 /**
  * 是否錄入指紋,有些設備上即使錄入了指紋,但是沒有開啟鎖屏密碼的話此方法還是返回false
  *
  * @return
  */
 private boolean isHasEnrolledFingerprints() {
  try {
   return mFingerprintManager.hasEnrolledFingerprints();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * 是否有指紋識別硬件支持
  *
  * @return
  */
 public boolean isHardwareDetected() {
  try {
   return mFingerprintManager.isHardwareDetected();
  } catch (Exception e) {
   return false;
  }
 }

 /**
  * 判斷是否開啟鎖屏密碼
  *
  * @return
  */
 private boolean isKeyguardSecure() {
  try {
   return mKeyManager.isKeyguardSecure();
  } catch (Exception e) {
   return false;
  }

 }

 /**
  * 指紋識別回調接口
  */
 public interface IFingerprintResultListener {
  void onInSecurity();

  void onNoEnroll();

  void onSupport();

  void onAuthenticateStart();

  void onAuthenticateError(int errMsgId, CharSequence errString);

  void onAuthenticateFailed();

  void onAuthenticateHelp(int helpMsgId, CharSequence helpString);

  void onAuthenticateSucceeded(FingerprintManagerCompat.AuthenticationResult result);

 }

 public void cancelAuthenticate() {
  if (mCancellationSignal != null) {
   mCancellationSignal.cancel();
   mCancellationSignal = null;
  }
 }


 public void onDestroy() {
  cancelAuthenticate();
  mKeyManager = null;
  mFingerprintManager = null;

 }

參考了一些資料,做了一些驗證,得到一些結論:

1、當指紋識別失敗后,會調用onAuthenticationFailed()方法,這時候指紋傳感器并沒有關閉,谷歌原生系統給了我們5次重試機會,也就是說,連續調用了4次onAuthenticationFailed()方法后,第5次會調用onAuthenticateError(int errMsgId, CharSequence errString)方法,此時errMsgId==7。

2、每次重新授權,哪怕不去校驗,取消時會走onAuthenticateError(int errMsgId, CharSequence errString) 方法,其中errMsgId==5,

3、當系統調用了onAuthenticationError()和onAuthenticationSucceeded()后,傳感器會關閉,只有我們重新授權,再次調用authenticate()方法后才能繼續使用指紋識別功能。

4、兼容android6.0以下系統的話,不要使用FingerprintManagerCompat, 低于M的系統版本,FingerprintManagerCompat無論手機是否有指紋識別模塊,均認為沒有指紋識別,可以用FingerprintManager來做。

5、考慮到安全因素,最好authenticate(CryptoObject crypto, CancellationSignal cancel, int flags, AuthenticationCallback callback, Handler handler)時加入CryptoObject 。crypto這是一個加密類的對象,指紋掃描器會使用這個對象來判斷認證結果的合法性。這個對象可以是null,但是這樣的話,就意味著app無條件信任認證的結果,這個過程可能被攻擊,數據可以被篡改,這是app在這種情況下必須承擔的風險。因此,建議這個參數不要置為null。

上述內容就是利用Android6.0怎么實現一個指紋識別功能,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉峪关市| 无极县| 边坝县| 蚌埠市| 西城区| 和林格尔县| 子洲县| 普定县| 义马市| 广丰县| 衡水市| 水城县| 成都市| 大洼县| 陆川县| 正蓝旗| 南澳县| 闻喜县| 炎陵县| 扎赉特旗| 景宁| 高青县| 曲靖市| 洮南市| 和平区| 宁武县| 抚顺市| 辉南县| 新昌县| 绥中县| 滦平县| 嘉义县| 正宁县| 宁远县| 昌邑市| 乳山市| 中超| 库尔勒市| 昆明市| 明水县| 洛川县|