編輯:關於Android編程
指紋識別這個名詞聽起來並不陌生,但是實際開發過程中用得並不多。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包中的類使用與上面標准庫中的一致,就是名字不一樣而已,這裡不再介紹使用方式。介紹了標准的指紋識別接口,下面開始分析指紋識別適配的情況。如果你想做指紋識別相關的功能,你需要全面了解指紋識別相關的坑。
指紋識別適配
指紋識別適配會有很多問題,這些問題可以從下面三種情況中看出。
一般情況下只需要跟著Google官方走就行,6.0以下系統直接不支持,這樣也省去很多適配問題。但是如果一個app擁有大量第三方廠商6.0以下的設備,非要支持指紋識別功能,那麼只能去做支持了。對於上面提到的三種情況,前面兩種情況代碼寫法是一致的,只需要按照Google官方文檔寫就行了,只是不再需要api>=23的邏輯判斷,代碼會有警告,還必須使用try catch進程異常捕獲,因為鬼都不知道廠商系統內部會發生什麼崩潰出來(紅米note3,系統5.0或者5.1的,調用mFingerprintManager.hasEnrolledFingerprints()方法時,內部拋出空指針異常)。第三種情況如果要做支持,只能通過公司合作的方式去找廠商提供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
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
Bluestacks安卓模擬器要怎麼安裝自己下載到電腦上的本地APK文件呢?如果你沒有安裝360助手之類的軟件,Bluestacks默認會關聯電腦上的APK
先上效果圖:這個效果一開始我是想直接讓UI給個切圖,後來發現這樣不行,適配很差,達不到效果。所以就自己動手寫代碼,其實思路也很簡單:在這個布局的父布局上面再手動添加一個v
Gradle之管理多個Module編譯在一個工程項目中,我們可能會有多個Module,如:多個app,library。我們來看下一個最簡單的多個Module的build文
標注(Marker)是開發者最常使用的地圖覆蓋物志一,今天就來向大家介紹一些標注(Marker)的最基本使用方法! 實現目標: 1、構建基礎地圖頁面; 2、在地圖的中心點