国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android 6.0指紋識(shí)別App開發(fā)案例

2019-12-12 05:22:42
字體:
供稿:網(wǎng)友

在android 6.0中g(shù)oogle終于給android系統(tǒng)加上了指紋識(shí)別的支持,這個(gè)功能在iPhone上早就已經(jīng)實(shí)現(xiàn)了,并且在很多廠商的定制的ROM中也都自己內(nèi)部實(shí)現(xiàn)這個(gè)功能了,這個(gè)功能來的有點(diǎn)晚啊。在google全新發(fā)布的nexus設(shè)備:nexus 5x和nexus 6p中都攜帶了一顆指紋識(shí)別芯片在設(shè)備的背面,如下圖(圖片來自網(wǎng)絡(luò)):

筆者手中的設(shè)備就是圖上的那臺(tái)黑色的nexus 5x,話說這臺(tái)機(jī)器很是好看呢!手感超棒!
廢話不多說,下面我出一個(gè)指紋識(shí)別的demo app,并且詳細(xì)說明怎么開發(fā)一個(gè)基于google api的指紋識(shí)別app。demo的源碼在我的github上:
https://github.com/CreateChance/AndroidFingerPrintDemo

Android M中的指紋識(shí)別接口

這個(gè)是首先需要關(guān)注的問題,在實(shí)際動(dòng)手開始寫app之前需要知道最新的平臺(tái)為我們提供了那些指紋識(shí)別的接口。所有的指紋識(shí)別接口全部在android.hardware.fingerprint這個(gè)包下,這個(gè)包中的類不是很多,如下:

api doc鏈接地址:
https://developer.android.com/reference/android/hardware/fingerprint/package-summary.html
大家最好FQ自己看下。
上面的圖中,我們看到這個(gè)包中總共有4個(gè)類,下面我們簡要介紹一下他們:
1.FingerprintManager:主要用來協(xié)調(diào)管理和訪問指紋識(shí)別硬件設(shè)備
2.FingerprintManager.AuthenticationCallback這個(gè)一個(gè)callback接口,當(dāng)指紋認(rèn)證后系統(tǒng)會(huì)回調(diào)這個(gè)接口通知app認(rèn)證的結(jié)果是什么
3.FingerprintManager.AuthenticationResult這是一個(gè)表示認(rèn)證結(jié)果的類,會(huì)在回調(diào)接口中以參數(shù)給出
4.FingerprintManager.CryptoObject這是一個(gè)加密的對(duì)象類,用來保證認(rèn)證的安全性,這是一個(gè)重點(diǎn),下面我們會(huì)分析。
好了,到這里我們簡要知道了android 6.0給出的指紋識(shí)別的接口不是很多,可以說是簡短干練。

動(dòng)手開發(fā)一個(gè)指紋識(shí)別app

現(xiàn)在,我們要?jiǎng)邮謱懸粋€(gè)利用上面接口的指紋識(shí)別app,這個(gè)app界面很簡單,就一個(gè)activity,這個(gè)activity上會(huì)激活指紋識(shí)別,然后提示用戶按下指紋,并且會(huì)將認(rèn)證的結(jié)果顯示出來。

開始

在開始之前,我們需要知道使用指紋識(shí)別硬件的基本步驟:
1.在AndroidManifest.xml中申明如下權(quán)限:

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

2.獲得FingerprintManager的對(duì)象引用
3.在運(yùn)行是檢查設(shè)備指紋識(shí)別的兼容性,比如是否有指紋識(shí)別設(shè)備等。下面我們?cè)敿?xì)說一下上面的步驟:

申明權(quán)限

這一步比較簡單,只要在AndroidManifest.xml中添加上面說到的權(quán)限就可以了。

獲得FingerprintManager對(duì)象引用

這是app開發(fā)中獲得系統(tǒng)服務(wù)對(duì)象的常用方式,如下:

// Using the Android Support Library v4fingerprintManager = FingerprintManagerCompat.from(this);// Using API level 23:fingerprintManager = (FingerprintManager)getSystemService(Context.FINGERPRINT_SERVICE);

上面給出兩種方式,第一種是通過V4支持包獲得兼容的對(duì)象引用,這是google推行的做法;還有就是直接使用api 23 framework中的接口獲得對(duì)象引用。

檢查運(yùn)行條件

要使得我們的指紋識(shí)別app能夠正常運(yùn)行,有一些條件是必須滿足的。

1). API level 23
指紋識(shí)別API是在api level 23也就是android 6.0中加入的,因此我們的app必須運(yùn)行在這個(gè)系統(tǒng)版本之上。因此google推薦使用 Android Support Library v4包來獲得FingerprintManagerCompat對(duì)象,因?yàn)樵讷@得的時(shí)候這個(gè)包會(huì)檢查當(dāng)前系統(tǒng)平臺(tái)的版本。

2). 硬件
指紋識(shí)別肯定要求你的設(shè)備上有指紋識(shí)別的硬件,因此在運(yùn)行時(shí)需要檢查系統(tǒng)當(dāng)中是不是有指紋識(shí)別的硬件:

if (!fingerprintManager.isHardwareDetected()) { // no fingerprint sensor is detected, show dialog to tell user. AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.no_sensor_dialog_title); builder.setMessage(R.string.no_sensor_dialog_message); builder.setIcon(android.R.drawable.stat_sys_warning); builder.setCancelable(false); builder.setNegativeButton(R.string.cancel_btn_dialog, new DialogInterface.OnClickListener() {  @Override  public void onClick(DialogInterface dialog, int which) {   finish();  } }); // show this dialog. builder.create().show();}

調(diào)用上面的接口接可以知道系統(tǒng)中是不是有一個(gè)這樣的硬件,如果沒有的話,那就需要做一些合適的事情,比如提示用戶當(dāng)前系統(tǒng)中沒有指紋識(shí)別硬件等。

3). 當(dāng)前設(shè)備必須是處于安全保護(hù)中的
這個(gè)條件的意思是,你的設(shè)備必須是使用屏幕鎖保護(hù)的,這個(gè)屏幕鎖可以是password,PIN或者圖案都行。為什么是這樣呢?因?yàn)間oogle原生的邏輯就是:想要使用指紋識(shí)別的話,必須首先使能屏幕鎖才行,這個(gè)和android 5.0中的smart lock邏輯是一樣的,這是因?yàn)間oogle認(rèn)為目前的指紋識(shí)別技術(shù)還是有不足之處,安全性還是不能和傳統(tǒng)的方式比較的。
我們可以使用下面的代碼檢查當(dāng)前設(shè)備是不是處于安全保護(hù)中的:

KeyguardManager keyguardManager =(KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);if (keyguardManager.isKeyguardSecure()) { // this device is secure.}

我們使用KeyguardManager的isKeyguardSecure接口就能知道。

4). 系統(tǒng)中是不是有注冊(cè)的指紋
在android 6.0中,普通app要想使用指紋識(shí)別功能的話,用戶必須首先在setting中注冊(cè)至少一個(gè)指紋才行,否則是不能使用的。所以這里我們需要檢查當(dāng)前系統(tǒng)中是不是已經(jīng)有注冊(cè)的指紋信息了:

if (!fingerprintManager.hasEnrolledFingerprints()) { // no fingerprint image has been enrolled. AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.no_fingerprint_enrolled_dialog_title); builder.setMessage(R.string.no_fingerprint_enrolled_dialog_message); builder.setIcon(android.R.drawable.stat_sys_warning); builder.setCancelable(false); builder.setNegativeButton(R.string.cancel_btn_dialog, new DialogInterface.OnClickListener() {  @Override  public void onClick(DialogInterface dialog, int which) {   finish();  } }); // show this dialog builder.create().show();}

如果用戶還沒有注冊(cè)一個(gè)指紋的話,那么我們的app可以提示用戶:如果想要使用指紋是功能,請(qǐng)?jiān)賡etting中注冊(cè)一個(gè)你的指紋。這里需要

主站蜘蛛池模板: 临沭县| 平江县| 桂阳县| 拉萨市| 满城县| 天镇县| 乌兰浩特市| 巴彦淖尔市| 马山县| 尤溪县| 岢岚县| 平谷区| 东乌珠穆沁旗| 太康县| 黔东| 策勒县| 宣汉县| 山阳县| 沁源县| 枣阳市| 凉城县| 浦北县| 绍兴市| 澜沧| 七台河市| 阿图什市| 新郑市| 沐川县| 屏边| 正阳县| 县级市| 上杭县| 金沙县| 基隆市| 景洪市| 巫山县| 大连市| 东山县| 南召县| 安义县| 临西县|