Android指紋識(shí)別功能深入淺出分析到實(shí)戰(zhàn)(6.0以下系統(tǒng)解決方案)
指紋識(shí)別這個(gè)名詞聽起來并不陌生,但是實(shí)際開發(fā)過程中用得并不多。Google從Android6.0(api23)開始才提供標(biāo)準(zhǔn)指紋識(shí)別支持,并對(duì)外提供指紋識(shí)別相關(guān)的接口。本文除了能適配6.0及以上系統(tǒng),主要還提供6.0以下設(shè)備適配解決方案。
指紋識(shí)別用途
大概列舉幾個(gè)指紋識(shí)別的用途
- 系統(tǒng)解鎖
- 應(yīng)用鎖
- 支付認(rèn)證
- 普通的登錄認(rèn)證
指紋識(shí)別Google官方文檔
官方標(biāo)準(zhǔn)庫
Google提供的與指紋識(shí)別相關(guān)的核心類不多,主類是FingerprintManager,主類依賴三個(gè)內(nèi)部類,如下圖所示:
FingerprintManager主要提供三個(gè)方法如下:
FingerprintManager.AuthenticationCallback類提供的回調(diào)接口如下,重點(diǎn)區(qū)分紅色下劃線標(biāo)注的部分
啟動(dòng)指紋識(shí)別接口
看了上面的介紹,如果要寫代碼就變得簡單了
1. AndroidManifest權(quán)限聲明
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
2. 獲取FingerManager服務(wù)對(duì)象
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. 啟動(dòng)指紋識(shí)別
mFingerprintManager.authenticate(cryptoObject, mCancellationSignal, 0, mAuthCallback, null);
參數(shù)意思參考文檔說明,這里比較復(fù)雜的是創(chuàng)建CryptoObject對(duì)象,如果只是簡單測試可以為null,具體代碼參考文章末尾提供的項(xiàng)目地址
官方v4兼容包
上面介紹最標(biāo)準(zhǔn)的官方實(shí)現(xiàn)指紋識(shí)別的方式,當(dāng)然適配肯定沒這么簡單,因?yàn)橛泻芏嘣O(shè)備兼容性要考慮,Google后續(xù)再v4包中提供了一套完整的實(shí)現(xiàn),實(shí)現(xiàn)類與上面的一一對(duì)應(yīng)的,就是改了個(gè)名字(FingerprintManager改為了FingerprintManagerCompat,機(jī)智的發(fā)現(xiàn)Compat是兼容的意思,所以Google在v4包中做了一些兼容性處理),做了很多兼容處理,官方推薦使用后者。v4包中類結(jié)構(gòu)如下:
v4包中的類使用與上面標(biāo)準(zhǔn)庫中的一致,就是名字不一樣而已,這里不再介紹使用方式。介紹了標(biāo)準(zhǔn)的指紋識(shí)別接口,下面開始分析指紋識(shí)別適配的情況。如果你想做指紋識(shí)別相關(guān)的功能,你需要全面了解指紋識(shí)別相關(guān)的坑。
指紋識(shí)別適配
指紋識(shí)別適配會(huì)有很多問題,這些問題可以從下面三種情況中看出。
- Google官方支持指紋識(shí)別的標(biāo)準(zhǔn)接口是在Android6.0開始的,如果各個(gè)廠商都升級(jí)到6.0并且硬件上都給予支持,那么我們按照標(biāo)準(zhǔn)的指紋識(shí)別接口使用就可以了。
- 如果在android6.0發(fā)布以后,手機(jī)廠商來不及升級(jí),但是工程師們參考了官方指紋識(shí)別的代碼,把代碼移植到他們的6.0版本以下的系統(tǒng),或者參照Google提供的接口自己實(shí)現(xiàn)了一套指紋識(shí)別機(jī)制,只是對(duì)開發(fā)者暴露的接口一樣,這樣就可以像使用標(biāo)準(zhǔn)接口一樣使用,但是這種情況就難說了,實(shí)現(xiàn)不好的可能本身就有很多bug,適配起也比較麻煩,不過起碼還是能用的。
- 如果廠商在Google之前就已經(jīng)做了指紋識(shí)別,那這種情況肯定不能使用官方標(biāo)準(zhǔn)接口,如果要適配這種設(shè)備,只能使用廠商提供的第三方指紋識(shí)別SDK。
一般情況下只需要跟著Google官方走就行,6.0以下系統(tǒng)直接不支持,這樣也省去很多適配問題。但是如果一個(gè)app擁有大量第三方廠商6.0以下的設(shè)備,非要支持指紋識(shí)別功能,那么只能去做支持了。對(duì)于上面提到的三種情況,前面兩種情況代碼寫法是一致的,只需要按照Google官方文檔寫就行了,只是不再需要api>=23的邏輯判斷,代碼會(huì)有警告,還必須使用try catch進(jìn)程異常捕獲,因?yàn)楣矶疾恢缽S商系統(tǒng)內(nèi)部會(huì)發(fā)生什么崩潰出來(紅米note3,系統(tǒng)5.0或者5.1的,調(diào)用mFingerprintManager.hasEnrolledFingerprints()方法時(shí),內(nèi)部拋出空指針異常)。第三種情況如果要做支持,只能通過公司合作的方式去找廠商提供SDK了。
指紋識(shí)別操作截圖
本項(xiàng)目中只對(duì)上文提到的前面兩種情況做支持,下面是在Vivo V3(系統(tǒng)5.1.1,api 22)設(shè)備上操作截圖。
主界面

開始指紋識(shí)別

指紋識(shí)別結(jié)果

操作動(dòng)畫演示

項(xiàng)目地址
源碼下載:源碼下載地址
經(jīng)驗(yàn)總結(jié)
指紋識(shí)別雖然適配上有很多問題,安全性方面也還不完善,但是指紋識(shí)別的方便快捷體驗(yàn)確實(shí)不錯(cuò),用在一些不需要關(guān)注安全性能的產(chǎn)品上是完全可以的。如果您想了解指紋識(shí)別,您想知道指紋識(shí)別怎么適配不同的api版本,那么本項(xiàng)目值得參考。知識(shí)這東西,說不定什么時(shí)候它就起作用了,技多不壓身,多學(xué)習(xí)多了解是好事。
特殊設(shè)備上的坑
Letv X500 Android 6.0,API23
不按正常的套路回調(diào)onAuthenticationError,onAuthenticationFailed,理論上應(yīng)該是識(shí)別失敗的情況,它回調(diào)Error,點(diǎn)擊取消指紋識(shí)別也會(huì)先回調(diào)一次Error,如果遇到這種情況,只能根據(jù)具體項(xiàng)目環(huán)境中去進(jìn)行規(guī)避適配了。
原文鏈接:http://www.cnblogs.com/popfisher/p/6063835.html
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 8.0中一些坑以及對(duì)應(yīng)的解決方法
這篇文章主要給大家介紹了關(guān)于Android 8.0中一些坑以及對(duì)應(yīng)的解決方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
Android中實(shí)現(xiàn)圓角圖片的幾種方法
本篇文章主要介紹了Android中實(shí)現(xiàn)圓角圖片的幾種方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
Android實(shí)現(xiàn)關(guān)機(jī)后數(shù)據(jù)不會(huì)丟失問題
這篇文章主要介紹了Android實(shí)現(xiàn)關(guān)機(jī)后數(shù)據(jù)不會(huì)丟失問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
Android開發(fā)中MJRefresh自定義刷新動(dòng)畫效果
本文給大家介紹了MJRefresh自定義刷新動(dòng)畫效果,包括常見用法等相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-11-11
Android Activity之間相互調(diào)用與傳遞參數(shù)的原理與用法分析
這篇文章主要介紹了Android Activity之間相互調(diào)用與傳遞參數(shù)的原理與用法,較為詳細(xì)的分析了Android組件的構(gòu)成以及Activity的創(chuàng)建、調(diào)用、切換等相關(guān)操作技巧,需要的朋友可以參考下2016-08-08
Android?AMS啟動(dòng)App進(jìn)程原理分析
這篇文章主要介紹了Android?AMS啟動(dòng)App進(jìn)程原理,系統(tǒng)fork函數(shù)是如何創(chuàng)建進(jìn)程,文中有詳細(xì)的代碼示例,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-05-05
Android實(shí)現(xiàn)簡單點(diǎn)贊動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡單點(diǎn)贊動(dòng)畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
詳解Android的自動(dòng)化構(gòu)建及發(fā)布
本篇文章主要介紹了Android的自動(dòng)化構(gòu)建及發(fā)布,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
Android List(集合)中的對(duì)象以某一個(gè)字段排序案例
這篇文章主要介紹了Android List(集合)中的對(duì)象以某一個(gè)字段排序案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08
實(shí)例詳解Android快速開發(fā)工具類總結(jié)
這篇文章主要介紹了實(shí)例詳解Android快速開發(fā)工具類總結(jié)的相關(guān)資料,需要的朋友可以參考下2016-01-01

