Android指紋識別

??常用開發(fā)工具類和自定義view召夹,無恥的求個star:
??https://github.com/AbrahamCaiJin/CommonUtilLibrary
??最近開始做項目的時候跪楞,需要用到Android中的指紋識別浙踢,剛開始實在是有點懵逼甲葬,主要是別人給的意見讓我把思路給堵住了类少,現(xiàn)在回過頭來看看缀匕,其實也是意見很簡單的事艺蝴,不過最開始是因為Android6.0才剛出來沒多久腿准,對于指紋識別沒有過多的介紹贺嫂。也有哥們問過我通過指紋識別來進行登錄滓鸠,支付等操作,其實都是一樣的第喳。有指紋識別的手機可以通知指紋來實現(xiàn)糜俗,沒有的就換一種思路嘛,判斷一下曲饱,采用原始的輸入密碼也是一樣的∮颇ǎ現(xiàn)在把自己的一些收獲記錄下來,希望能夠幫助到其他人扩淀。不了解指紋識別的可以先看看這兩篇博客锌钮,對于你理解指紋識別是有幫助的。
http://blog.csdn.net/baniel01/article/details/51991764
http://blog.csdn.net/u011468824/article/details/51437795
在此對兩位博主表示感謝引矩。還有在我做指紋識別的時候?qū)ξ規(guī)椭囊晃煌辛呵穑卜浅8兄x。
主要代碼記錄如下:

import android.Manifest; 
import android.app.KeyguardManager; 
import android.content.Context; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.hardware.fingerprint.FingerprintManager; 
import android.os.Bundle; 
import android.os.CancellationSignal; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.app.FragmentActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast;

public class MainActivity extends FragmentActivity { 
FingerprintManager manager; 
KeyguardManager mKeyManager; 
private final static int REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS = 0; 
private final static String TAG = “finger_log”;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    manager = (FingerprintManager) this.getSystemService(Context.FINGERPRINT_SERVICE);
    mKeyManager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE);
    Button btn_finger = (Button) findViewById(R.id.btn_activity_main_finger);
    btn_finger.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isFinger()) {
                Toast.makeText(MainActivity.this, "請進行指紋識別", Toast.LENGTH_LONG).show();
                Log(TAG, "keyi");
                startListening(null);
            }
        }
    });
}

public boolean isFinger() {
    if (!manager.isHardwareDetected()) {
        Toast.makeText(this, "沒有指紋識別模塊", Toast.LENGTH_SHORT).show();
        return false;
    }
    if (!mKeyManager.isKeyguardSecure()) {
        Toast.makeText(this, "沒有開啟鎖屏密碼", Toast.LENGTH_SHORT).show();
        return false;
    }
    if (!manager.hasEnrolledFingerprints()) {
        Toast.makeText(this, "沒有錄入指紋", Toast.LENGTH_SHORT).show();
        return false;
    }
    return true;
}

CancellationSignal mCancellationSignal = new CancellationSignal();
//回調(diào)方法
FingerprintManager.AuthenticationCallback mSelfCancelled = new FingerprintManager.AuthenticationCallback() {
    @Override
    public void onAuthenticationError(int errorCode, CharSequence errString) {
        //但多次指紋密碼驗證錯誤后旺韭,進入此方法氛谜;并且,不能短時間內(nèi)調(diào)用指紋驗證
        Toast.makeText(MainActivity.this, errString, Toast.LENGTH_SHORT).show();
        showAuthenticationScreen();
    }
    @Override
    public void onAuthenticationHelp(int helpCode, CharSequence helpString) {

        Toast.makeText(MainActivity.this, helpString, Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
        Toast.makeText(MainActivity.this, "指紋識別成功", Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onAuthenticationFailed() {
        Toast.makeText(MainActivity.this, "指紋識別失敗", Toast.LENGTH_SHORT).show();
    }
};
public void startListening(FingerprintManager.CryptoObject cryptoObject) {
    //android studio 上区端,沒有這個會報錯
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
        Toast.makeText(this, "沒有指紋識別權(quán)限", Toast.LENGTH_SHORT).show();
        return;
    }
    manager.authenticate(cryptoObject, mCancellationSignal, 0, mSelfCancelled, null);

}

private void showAuthenticationScreen() {
    Intent intent = mKeyManager.createConfirmDeviceCredentialIntent("finger", "測試指紋識別");
    if (intent != null) {
        startActivityForResult(intent, REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS);
    }
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS) {
        // Challenge completed, proceed with using cipher
        if (resultCode == RESULT_OK) {
            Toast.makeText(this, "識別成功", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "識別失敗", Toast.LENGTH_SHORT).show();
        }
    }
}
private void Log(String tag, String msg) {
    Log.d(tag, msg);
}
} 

??有人可能會想了值漫,這應(yīng)該只能在6.0以上的手機才能用吧,不是的织盼,因為6.0以前也有指紋識別的手機杨何,不過現(xiàn)在android生產(chǎn)廠商太多了,機制不一樣可能會遇到不同的問題沥邻,我是這樣解決的危虱。首先第一種,只支持6.0以上的指紋識別的手機唐全,就是在調(diào)用指紋識別的時候先判斷一下sdk埃跷。但是這對于大多數(shù)是不太現(xiàn)實的蕊玷,至少現(xiàn)在是這樣,第二種就是實現(xiàn)指紋識別的時候可以采用FingerprintManagerCompat這個類來實現(xiàn)弥雹,這個是v4包的可以兼容6.0以下的垃帅,但是在6.0以上不知道是不是有問題,有興趣的可以去了解一下剪勿。還有最后一種解決的方式贸诚,就是在調(diào)用指紋識別的時候,可以采用反射的方式來判斷手機是否支持指紋識別厕吉,或者說手機是否支持指紋識別的類
Class.forName(“android.hardware.fingerprint.FingerprintManager”);
這個就是上面提到的網(wǎng)友幫我想到的辦法酱固,這樣基本上所有的手機就可以正常使用了。

更多詳細內(nèi)容:http://blog.csdn.net/u014727709/article/details/53325732

最后附上下載地址赴涵,有需要的可以前去
http://download.csdn.net/detail/u014727709/9692836

歡迎start媒怯,歡迎評論,歡迎指正

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末髓窜,一起剝皮案震驚了整個濱河市扇苞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寄纵,老刑警劉巖鳖敷,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異程拭,居然都是意外死亡定踱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門恃鞋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崖媚,“玉大人,你說我怎么就攤上這事恤浪〕┭疲” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵水由,是天一觀的道長荠呐。 經(jīng)常有香客問我,道長砂客,這世上最難降的妖魔是什么泥张? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮鞠值,結(jié)果婚禮上媚创,老公的妹妹穿的比我還像新娘。我一直安慰自己齿诉,他們只是感情好筝野,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布晌姚。 她就那樣靜靜地躺著粤剧,像睡著了一般歇竟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抵恋,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天焕议,我揣著相機與錄音,去河邊找鬼弧关。 笑死盅安,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的世囊。 我是一名探鬼主播别瞭,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼株憾!你這毒婦竟也來了蝙寨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤嗤瞎,失蹤者是張志新(化名)和其女友劉穎墙歪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贝奇,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡虹菲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了掉瞳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毕源。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖陕习,靈堂內(nèi)的尸體忽然破棺而出霎褐,到底是詐尸還是另有隱情,我是刑警寧澤衡查,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布瘩欺,位于F島的核電站,受9級特大地震影響拌牲,放射性物質(zhì)發(fā)生泄漏俱饿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一塌忽、第九天 我趴在偏房一處隱蔽的房頂上張望拍埠。 院中可真熱鬧,春花似錦土居、人聲如沸枣购。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棉圈。三九已至涩堤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間分瘾,已是汗流浹背胎围。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留德召,地道東北人白魂。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像上岗,于是被迫代替她去往敵國和親福荸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

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