Android指紋識(shí)別功能
指紋識(shí)別作為最新興起的用戶身份驗(yàn)證機(jī)制,已經(jīng)被越來越多的應(yīng)用程序所采用,相比傳統(tǒng)的密碼九宮格等驗(yàn)證方法,指紋識(shí)別更加安全,如今越來越多的安卓手機(jī)配備了指紋識(shí)別模塊,我們就來嘗試一下這一項(xiàng)新興的技術(shù)
首先創(chuàng)建一個(gè)安卓項(xiàng)目,指紋識(shí)別作為最近幾年才興起的技術(shù),對(duì)安卓api level要求較高(api 23以上即jdk6.0以上)
創(chuàng)建一個(gè)button用于觸發(fā)指紋識(shí)別,并在MainActivity里對(duì)其監(jiān)聽,代碼如下
Button button=(Button)findViewById(R.id.checkFingerPrint); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.d("btn","開始識(shí)別"); checkFingerPrint(); } });
在checkFingerPrint方法里調(diào)用系統(tǒng)提供的指紋識(shí)別函數(shù)FingerprintManagerCompat的authenticate,代碼如下
private void checkFingerPrint(){ FingerprintManagerCompat.from(this).authenticate(null,0,null,new MyCallBack(),null); }
在這里解釋一下這個(gè)方法里各個(gè)參數(shù)的含義
第一個(gè)參數(shù)是用于通過指紋驗(yàn)證取出AndroidKeyStore中的key的對(duì)象
第二個(gè)參數(shù)可以用來取消指紋驗(yàn)證,如果想手動(dòng)關(guān)閉驗(yàn)證,可以調(diào)用該參數(shù)的cancel方法
第三個(gè)參數(shù)沒什么意義,就是傳0就好了
第四個(gè)參數(shù)最重要,由于指紋信息是存在系統(tǒng)硬件中的,app是不可以訪問指紋信息的,所以每次驗(yàn)證的時(shí)候,系統(tǒng)會(huì)通過這個(gè)callback告訴你是否驗(yàn)證通過、驗(yàn)證失敗等
第五個(gè)參數(shù)是handler,fingerprint中的消息都通過這個(gè)handler來傳遞消息,如果你傳空,則默認(rèn)創(chuàng)建一個(gè)在主線程上的handler來傳遞消息,沒什么用,0傳null好了
通過這個(gè)函數(shù)api我們能夠看出來第四個(gè)參數(shù)最重要,他是決定指紋成功和失敗以及驗(yàn)證失敗后的后續(xù)操作,接下來我們就通過繼承重寫這個(gè)函數(shù)(注意參數(shù)一定要跟父類一致,博主就是沒寫對(duì)一開始函數(shù)不執(zhí)行),代碼如下
public class MyCallBack extends FingerprintManagerCompat.AuthenticationCallback{ private static final String TAG = "MyCallBack"; @Override public void onAuthenticationFailed(){ Log.d(TAG,"指紋錯(cuò)誤"); } public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result){ Log.d(TAG,"指紋正確"); } }
這里我們給指紋識(shí)別正確和錯(cuò)誤添加了打印在控制臺(tái)的后續(xù)動(dòng)作,當(dāng)然繼承的這個(gè)類還有其他的方法onAuthenticationError和onAuthenticationHelp,這兩個(gè)方法是處理識(shí)別不成功的。這里要區(qū)分一下識(shí)別不成功和識(shí)別錯(cuò)誤的區(qū)別,前者是指沒有識(shí)別到指紋而后者是識(shí)別到了指紋但不匹配
接下來我們用模擬器做測試,出于安全的考慮谷歌暫時(shí)沒有開放指紋存儲(chǔ)的功能,因此該功能使用的是系統(tǒng)里的指紋,也就是我們傳統(tǒng)的用于解鎖屏幕時(shí)設(shè)置的指紋,為了測試我們?nèi)ツM器里設(shè)置一個(gè)指紋
接下來進(jìn)到程序里面去測試我們的指紋識(shí)別,首先是用已經(jīng)錄入的指紋,通過控制臺(tái)可以看到已經(jīng)執(zhí)行了識(shí)別成功的方法
然后我們換錯(cuò)誤的指紋,再試一次,可以看到錯(cuò)誤指紋的方法也已經(jīng)被調(diào)用了
接下來貼出全部的代碼供大家參考
package com.example.john.fingerprinttest; import android.support.v4.hardware.fingerprint.FingerprintManagerCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button=(Button)findViewById(R.id.checkFingerPrint); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.d("btn","開始識(shí)別"); checkFingerPrint(); } }); } private void checkFingerPrint(){ FingerprintManagerCompat.from(this).authenticate(null,0,null,new MyCallBack(),null); } public class MyCallBack extends FingerprintManagerCompat.AuthenticationCallback{ private static final String TAG = "MyCallBack"; @Override public void onAuthenticationFailed(){ Log.d(TAG,"指紋錯(cuò)誤"); } public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result){ Log.d(TAG,"指紋正確"); } } }
這個(gè)程序只實(shí)現(xiàn)了簡單的指紋識(shí)別,當(dāng)然作為一個(gè)涉及到安全性的功能,谷歌提供的東西遠(yuǎn)不止這些,比如多次識(shí)別錯(cuò)誤的保護(hù)等等。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
實(shí)例講解Android Fragment的兩種使用方法
今天小編就為大家分享一篇關(guān)于實(shí)例講解Android Fragment的兩種使用方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03Android實(shí)現(xiàn)三段式滑動(dòng)效果
最近發(fā)現(xiàn)很多app都使用了三段式滑動(dòng),比如說高德的首頁和某寶等物流信息都是使用的三段式滑動(dòng)方式,谷歌其實(shí)給了我們很好的2段式滑動(dòng),就是BottomSheet,所以這次我也是在這個(gè)原理基礎(chǔ)上做了一個(gè)小小的修改來實(shí)現(xiàn)我們今天想要的效果。2021-06-06Android9.0 靜默安裝源碼的實(shí)現(xiàn)
這篇文章主要介紹了Android9.0 靜默安裝源碼的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Kotlin標(biāo)準(zhǔn)庫函數(shù)使用分析及介紹
Kotlin提供了一個(gè)系統(tǒng)庫,是Java庫的增強(qiáng)。其中有很多函數(shù)在適配了Java的類型和方法同時(shí)使用Kotlin的語法。其中一些底層的函數(shù) 是使用比較廣泛的2022-09-09Android SurfaceView運(yùn)行機(jī)制剖析--處理切換到后臺(tái)再重新進(jìn)入程序時(shí)的異常
本文主要介紹Android SurfaceView運(yùn)行機(jī)制,這里整理了詳細(xì)的資料來講解SurfaceView的運(yùn)行原理,并附示例代碼參考,有需要的小伙伴可以參考下2016-08-08Android編程之界面實(shí)現(xiàn)全屏顯示的方法(2種方法)
這篇文章主要介紹了Android編程之界面實(shí)現(xiàn)全屏顯示的方法,結(jié)合實(shí)例分析了Java代碼中設(shè)置與Manifest文件設(shè)置2種實(shí)現(xiàn)方法,需要的朋友可以參考下2016-01-01AndroidGUI27中findViewById返回null的快速解決辦法
這篇文章主要介紹了AndroidGUI27中findViewById返回null的快速解決辦法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06Android項(xiàng)目實(shí)戰(zhàn)(二十八):使用Zxing實(shí)現(xiàn)二維碼及優(yōu)化實(shí)例
這篇文章主要介紹了Android項(xiàng)目實(shí)戰(zhàn)(二十八):使用Zxing實(shí)現(xiàn)二維碼及優(yōu)化實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11