android 指紋識(shí)別調(diào)用實(shí)現(xiàn)方法及示例代碼
activity_main.xml源碼
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.liu.finger.MainActivity"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textSize="18sp" /> <Button android:id="@+id/btn_activity_main_finger" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_below="@+id/textView" android:layout_marginTop="54dp" android:text="指紋識(shí)別" /> </LinearLayout>
MainActivity.java源碼
package com.liu.finger; 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, "請(qǐng)進(jìn)行指紋識(shí)別", Toast.LENGTH_LONG).show(); Log(TAG, "keyi"); startListening(null); } } }); } public boolean isFinger() { //android studio 上,沒有這個(gè)會(huì)報(bào)錯(cuò) if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "沒有指紋識(shí)別權(quán)限", Toast.LENGTH_SHORT).show(); return false; } Log(TAG, "有指紋權(quán)限"); //判斷硬件是否支持指紋識(shí)別 if (!manager.isHardwareDetected()) { Toast.makeText(this, "沒有指紋識(shí)別模塊", Toast.LENGTH_SHORT).show(); return false; } Log(TAG, "有指紋模塊"); //判斷 是否開啟鎖屏密碼 if (!mKeyManager.isKeyguardSecure()) { Toast.makeText(this, "沒有開啟鎖屏密碼", Toast.LENGTH_SHORT).show(); return false; } Log(TAG, "已開啟鎖屏密碼"); //判斷是否有指紋錄入 if (!manager.hasEnrolledFingerprints()) { Toast.makeText(this, "沒有錄入指紋", Toast.LENGTH_SHORT).show(); return false; } Log(TAG, "已錄入指紋"); return true; } CancellationSignal mCancellationSignal = new CancellationSignal(); //回調(diào)方法 FingerprintManager.AuthenticationCallback mSelfCancelled = new FingerprintManager.AuthenticationCallback() { @Override public void onAuthenticationError(int errorCode, CharSequence errString) { //但多次指紋密碼驗(yàn)證錯(cuò)誤后,進(jìn)入此方法;并且,不能短時(shí)間內(nèi)調(diào)用指紋驗(yàn)證 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, "指紋識(shí)別成功", Toast.LENGTH_SHORT).show(); } @Override public void onAuthenticationFailed() { Toast.makeText(MainActivity.this, "指紋識(shí)別失敗", Toast.LENGTH_SHORT).show(); } }; public void startListening(FingerprintManager.CryptoObject cryptoObject) { //android studio 上,沒有這個(gè)會(huì)報(bào)錯(cuò) if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "沒有指紋識(shí)別權(quán)限", Toast.LENGTH_SHORT).show(); return; } manager.authenticate(cryptoObject, mCancellationSignal, 0, mSelfCancelled, null); } /** * 鎖屏密碼 */ private void showAuthenticationScreen() { Intent intent = mKeyManager.createConfirmDeviceCredentialIntent("finger", "測(cè)試指紋識(shí)別"); 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, "識(shí)別成功", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "識(shí)別失敗", Toast.LENGTH_SHORT).show(); } } } private void Log(String tag, String msg) { Log.d(tag, msg); } }
通過此文希望能幫助開發(fā)Android 指紋識(shí)別的朋友,謝謝大家對(duì)本站的支持!
- Android 指紋識(shí)別詳解及實(shí)現(xiàn)方法
- Android獲取apk簽名指紋的md5值(防止重新被打包)的實(shí)現(xiàn)方法
- Android中的指紋識(shí)別demo開發(fā)實(shí)例
- Android 6.0指紋識(shí)別App開發(fā)案例
- Android7.0指紋服務(wù)FingerprintService實(shí)例介紹
- Android指紋識(shí)別API初試
- Android6.0指紋識(shí)別開發(fā)實(shí)例詳解
- Android6.0指紋識(shí)別開發(fā)案例
- Android 指紋識(shí)別開發(fā)實(shí)例
- Android指紋登錄工具類封裝
相關(guān)文章
Android入門之實(shí)現(xiàn)手工發(fā)送一個(gè)BroadCast
這篇文章主要通過手工來發(fā)送一條BroadCast進(jìn)一步來帶大家深入了解BroadCast,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Android有一定幫助,感興趣的可以收藏一下2022-12-12Android Moveview滑屏移動(dòng)視圖類完整實(shí)例
這篇文章主要介紹了Android Moveview滑屏移動(dòng)視圖類,很有實(shí)用價(jià)值,需要的朋友可以參考下2014-07-07Android中實(shí)現(xiàn)下載和解壓zip文件功能代碼分享
這篇文章主要介紹了Android中實(shí)現(xiàn)下載和解壓zip文件功能代碼分享,本文直接給出了實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03android 獲取視頻,圖片縮略圖的具體實(shí)現(xiàn)
android 獲取視頻,圖片縮略圖的具體實(shí)現(xiàn),需要的朋友可以參考一下2013-06-06更新至Android Studio4.1后發(fā)現(xiàn)as打不開的解決方法(原因分析)
這篇文章主要介紹了更新至Android Studio4.1后發(fā)現(xiàn)as打不開的解決方案,本文給大家分享問題所在原因給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Android實(shí)現(xiàn)帶簽到贏積分功能的日歷
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)帶簽到贏積分功能的日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android實(shí)現(xiàn)左右滑動(dòng)切換圖片
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)左右滑動(dòng)切換圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05