Android 指紋登錄工具類封裝

核心

Android 指紋 是在 6.0 才出來的一個(gè)重要的功能

@RequiresApi(api = Build.VERSION_CODES.M)

核心的兩個(gè) api:

FingerprintManager
KeyguardManager

step1

判斷android 版本葵陵,如果小于 6.0 支持不了指紋

if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M){
return;
}

step2

判斷 手機(jī)硬件(有沒有指紋感應(yīng)區(qū))就是手機(jī)是否支持傳感

  @RequiresApi(api = Build.VERSION_CODES.M)
    public boolean isHardFinger() {
        if (fingerprintManager != null && fingerprintManager.isHardwareDetected()) {
            return true;
        } else {
            return false;
        }
    }

step3

檢查手機(jī)是否開啟鎖屏密碼(如手機(jī)未開鎖侄旬,涉及到一個(gè)優(yōu)先級問題雕沿,先解鎖 后使用)

  public boolean isWindowSafe() {
        if (keyguardManager != null && keyguardManager.isKeyguardSecure()) {
            return true;
        } else {
            return false;
        }
    }

step4

檢查手機(jī)是否有錄入指紋

  @RequiresApi(api = Build.VERSION_CODES.M)
    public boolean isHaveHandler() {
        if (fingerprintManager != null && fingerprintManager.hasEnrolledFingerprints()) {
            return true;
        } else {
            return false;
        }
    }

只有以上步驟全滿足勺美,才能使用指紋

開啟指紋驗(yàn)證

    @RequiresApi(api = Build.VERSION_CODES.M)
    public void authenticate(FingerprintManager.CryptoObject cryptoObject, CancellationSignal cancellationSignal,
                             int flag,
                             FingerprintManager.AuthenticationCallback authenticationCallback, Handler handler) {
        if (fingerprintManager != null) {
            fingerprintManager.authenticate(cryptoObject, cancellationSignal, flag, authenticationCallback, handler);
        }
    }

參數(shù)中最重要的就是 cancellationSignal和 callback伍派,其他傳null 和 0 就行切厘,
cancellationsignal  是用來取消指紋驗(yàn)證的拦宣,而callback 可以回調(diào) 指紋驗(yàn)證失敗次數(shù) 或者指紋驗(yàn)證成功溢十、

最后附上簡單工具類

/**
 * 指紋識(shí)別工具類
 */
public class FingerUtils {

    private final FingerprintManager fingerprintManager;
    private final KeyguardManager keyguardManager;

    @RequiresApi(api = Build.VERSION_CODES.M)
    private FingerUtils(Context context) {
        fingerprintManager = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
        keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
    }

    private static FingerUtils singleton = null;

    @RequiresApi(api = Build.VERSION_CODES.M)
    public static FingerUtils getInstance(Context context) {
        if (singleton == null) {
            synchronized (FingerUtils.class) {
                if (singleton == null) {
                    singleton = new FingerUtils(context);
                }
            }
        }
        return singleton;
    }


    /**
     * ②檢查手機(jī)硬件(有沒有指紋感應(yīng)區(qū))
     */

    @RequiresApi(api = Build.VERSION_CODES.M)
    public boolean isHardFinger() {
        if (fingerprintManager != null && fingerprintManager.isHardwareDetected()) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * ③檢查手機(jī)是否開啟鎖屏密碼
     */

    public boolean isWindowSafe() {
        if (keyguardManager != null && keyguardManager.isKeyguardSecure()) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * ④檢查手機(jī)是否已錄入指紋
     */
    @RequiresApi(api = Build.VERSION_CODES.M)
    public boolean isHaveHandler() {
        if (fingerprintManager != null && fingerprintManager.hasEnrolledFingerprints()) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 創(chuàng)建指紋驗(yàn)證
     */
    @RequiresApi(api = Build.VERSION_CODES.M)
    public void authenticate(FingerprintManager.CryptoObject cryptoObject, CancellationSignal cancellationSignal,
                             int flag,
                             FingerprintManager.AuthenticationCallback authenticationCallback, Handler handler) {
        if (fingerprintManager != null) {
            fingerprintManager.authenticate(cryptoObject, cancellationSignal, flag, authenticationCallback, handler);
        }
    }

    /**
     * 取消指紋驗(yàn)證  . 應(yīng)該不會(huì)用上
     */
    public void cannelFinger(CancellationSignal cancellationSignal) {
        cancellationSignal.cancel();

    }
}

`

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末垮刹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子张弛,更是在濱河造成了極大的恐慌荒典,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吞鸭,死亡現(xiàn)場離奇詭異寺董,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)刻剥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門遮咖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人透敌,你說我怎么就攤上這事盯滚。” “怎么了酗电?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵魄藕,是天一觀的道長。 經(jīng)常有香客問我撵术,道長背率,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任嫩与,我火速辦了婚禮寝姿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘划滋。我一直安慰自己饵筑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布处坪。 她就那樣靜靜地躺著根资,像睡著了一般架专。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玄帕,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天部脚,我揣著相機(jī)與錄音,去河邊找鬼裤纹。 笑死委刘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鹰椒。 我是一名探鬼主播锡移,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吹零!你這毒婦竟也來了罩抗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灿椅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后钞支,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茫蛹,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年烁挟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了婴洼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡撼嗓,死狀恐怖柬采,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情且警,我是刑警寧澤粉捻,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站斑芜,受9級特大地震影響肩刃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杏头,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一盈包、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧醇王,春花似錦呢燥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滥朱。三九已至,卻和暖如春力试,著一層夾襖步出監(jiān)牢的瞬間徙邻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工畸裳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缰犁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓怖糊,卻偏偏與公主長得像帅容,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子伍伤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你并徘,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,724評論 2 59
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,140評論 25 707
  • 1.下列哪些語句關(guān)于內(nèi)存回收的說明是正確的? (b )A扰魂、 程序員必須創(chuàng)建一個(gè)線程來釋放內(nèi)存B麦乞、內(nèi)存回收程序負(fù)責(zé)釋...
    悠悠我心_4a00閱讀 555評論 0 2
  • 1.什么是Activity?問的不太多姐直,說點(diǎn)有深度的 四大組件之一,一般的,一個(gè)用戶交互界面對應(yīng)一個(gè)activit...
    JoonyLee閱讀 5,734評論 2 51
  • 有時(shí)候越是美好的回憶,越不敢去回憶蒋畜, 因?yàn)樯钪咽沁^去声畏,再去懷念,越是想念姻成,越是遺憾插龄;直到有一天相似的情景出現(xiàn),仿...
    空憑祭閱讀 254評論 0 2