Android指紋識別功能深入淺出分析到實戰(6.0以下系統解決方案)_Android

來源:互聯網
上載者:User

指紋識別這個名詞聽起來並不陌生,但是實際開發過程中用得並不多。Google從Android6.0(api23)開始才提供標準指紋識別支援,並對外提供指紋識別相關的介面。本文除了能適配6.0及以上系統,主要還提供6.0以下裝置適配解決方案。

指紋識別用途

大概列舉幾個指紋識別的用途

  • 系統解鎖
  • 應用鎖
  • 支付認證
  • 普通的登入認證

指紋識別Google官方文檔

官方標準庫

Google提供的與指紋識別相關的核心類不多,主類是FingerprintManager,主類依賴三個內部類,如下圖所示: 

FingerprintManager主要提供三個方法如下:
FingerprintManager.AuthenticationCallback類提供的回調介面如下,重點區分紅色底線標註的部分
啟動指紋識別介面

看了上面的介紹,如果要寫代碼就變得簡單了

1. AndroidManifest許可權聲明

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

2. 擷取FingerManager服務物件

public static FingerprintManager getFingerprintManager(Context context) {  FingerprintManager fingerprintManager = null;  try {    fingerprintManager = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);  } catch (Throwable e) {    FPLog.log("have not class FingerprintManager");  }  return fingerprintManager;}

3. 啟動指紋識別

mFingerprintManager.authenticate(cryptoObject, mCancellationSignal, 0, mAuthCallback, null);

參數意思參考文檔說明,這裡比較複雜的是建立CryptoObject對象,如果只是簡單測試可以為null,具體代碼參考文章末尾提供的項目地址

 官方v4相容包

上面介紹最標準的官方實現指紋識別的方式,當然適配肯定沒這麼簡單,因為有很多裝置相容性要考慮,Google後續再v4包中提供了一套完整的實現,實作類別與上面的一一對應的,就是改了個名字(FingerprintManager改為了FingerprintManagerCompat,機智的發現Compat是相容的意思,所以Google在v4包中做了一些相容性處理),做了很多相容處理,官方推薦使用後者。v4包中類結構如下:
v4包中的類使用與上面標準庫中的一致,就是名字不一樣而已,這裡不再介紹使用方式。介紹了標準的指紋識別介面,下面開始分析指紋識別適配的情況。如果你想做指紋識別相關的功能,你需要全面瞭解指紋識別相關的坑。

 指紋識別適配

指紋識別適配會有很多問題,這些問題可以從下面三種情況中看出。

  1. Google官方支援指紋識別的標準介面是在Android6.0開始的,如果各個廠商都升級到6.0並且硬體上都給予支援,那麼我們按照標準的指紋識別介面使用就可以了。
  2. 如果在android6.0發布以後,手機廠商來不及升級,但是工程師們參考了官方指紋識別的代碼,把代碼移植到他們的6.0版本以下的系統,或者參照Google提供的介面自己實現了一套指紋識別機制,只是對開發人員暴露的介面一樣,這樣就可以像使用標準介面一樣使用,但是這種情況就難說了,實現不好的可能本身就有很多bug,適配起也比較麻煩,不過起碼還是能用的。
  3. 如果廠商在Google之前就已經做了指紋識別,那這種情況肯定不能使用官方標準介面,如果要適配這種裝置,只能使用廠商提供的第三方指紋識別SDK。

一般情況下只需要跟著Google官方走就行,6.0以下系統直接不支援,這樣也省去很多適配問題。但是如果一個app擁有大量第三方廠商6.0以下的裝置,非要支援指紋識別功能,那麼只能去做支援了。對於上面提到的三種情況,前面兩種情況代碼寫法是一致的,只需要按照Google官方文檔寫就行了,只是不再需要api>=23的邏輯判斷,代碼會有警告,還必須使用try catch進程異常捕獲,因為鬼都不知道廠商系統內部會發生什麼崩潰出來(紅米note3,系統5.0或者5.1的,調用mFingerprintManager.hasEnrolledFingerprints()方法時,內部拋出null 指標異常)。第三種情況如果要做支援,只能通過公司合作的方式去找廠商提供SDK了。

 指紋識別操作截圖

本項目中只對上文提到的前面兩種情況做支援,下面是在Vivo V3(系統5.1.1,api 22)裝置上操作截圖。
 主介面    

  開始指紋識別

  指紋識別結果

  操作動畫示範

 

項目地址
源碼下載:源碼下載地址

經驗總結

指紋識別雖然適配上有很多問題,安全性方面也還不完善,但是指紋識別的方便快捷體驗確實不錯,用在一些不需要關注安全效能的產品上是完全可以的。如果您想瞭解指紋識別,您想知道指紋識別怎麼適配不同的api版本,那麼本項目值得參考。知識這東西,說不定什麼時候它就起作用了,技多不壓身,多學習多瞭解是好事。

特殊裝置上的坑

Letv X500 Android 6.0,API23

不按正常的套路回調onAuthenticationError,onAuthenticationFailed,理論上應該是識別失敗的情況,它回調Error,點擊取消指紋識別也會先回調一次Error,如果遇到這種情況,只能根據具體項目環境中去進行規避適配了。

原文連結:http://www.cnblogs.com/popfisher/p/6063835.html

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.