Android指紋解鎖示例代碼
Android6.0及以上系統(tǒng)支持指紋識別解鎖功能:項目中用到,特此抽離出來,備忘。
功能是這樣的:在用戶將app切換到后臺運行(超過一定的時長,比方說30秒),再進入程序中的時候就會彈出指紋識別的界面。用戶輸入指紋,解鎖成功。指紋識別的模塊其實很簡單啦,google的api已經(jīng)封裝好了,我們只需要學會調用就ok了。
思路:
在用戶將程序切換到后臺的時候需要有一個方法計時,這樣的方法寫在哪里呢,對,要寫在service中。在Activity中開啟服務:
Intent intent = new Intent("com.example.fingureprint.services.JudgeFingureService"); intent.setPackage(getPackageName()); startService(intent);
intent.setpackage(getPackageName);在6.0及以上系統(tǒng)中啟動服務必須加上這句。
服務不要忘記在清單文件中注冊幺。
<!--注冊判斷指紋密碼開啟的服務--> <service android:name="com.example.fingureprint.services.JudgeFingureService" android:enabled="true"> <intent-filter > <action android:name="com.example.fingureprint.services.JudgeFingureService"/> </intent-filter> </service>
在服務中onStart()開啟一個線程:
new Thread(){ public void run() { try { while(true){ Thread.sleep(1000); if(isAppOnForeground()){ Log.i("前臺運行", "time"+countnumber); if(countnumber>30){ if(!"com.example.fingureprint.FingureAriseActivity".equals(listActivity())){ Intent myintent = new Intent(); myintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); myintent.setClass(getApplicationContext(),FingureAriseActivity.class); startActivity(myintent); } countnumber = 0; }else{ countnumber = 0; } }else{ Log.i("后臺運行", "time"+countnumber); countnumber ++; } } } catch (InterruptedException e) { e.printStackTrace(); } }; }.start();
計時用了個while死循環(huán),讓thread睡一秒。哈哈,沒有用Handler是不是很簡單。
判斷程序是否在后臺運行:
/** * 判斷程序在前臺運行的方法 * @return */ public boolean isAppOnForeground() { ActivityManager systemService = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE); List<RunningAppProcessInfo> runningAppProcesses = systemService.getRunningAppProcesses(); if(runningAppProcesses==null) return false; for(RunningAppProcessInfo processes: runningAppProcesses){ if(processes.processName.equals("com.example.fingureprint")&&processes.importance==RunningAppProcessInfo.IMPORTANCE_FOREGROUND){ return true; } } return false; }
有一個小細節(jié),當用戶從后臺切換到前臺,但是用戶沒有解鎖,又切換到后臺,過三十秒后切換到前臺,這時候不能再跳出手勢解鎖界面了吧。
解決:1.設置下手勢界面的啟動方式。2.檢測程序的當前運行界面。
/** * 判斷當前運行在前臺的Activity */ @SuppressWarnings("deprecation") public String listActivity(){ ActivityManager systemService = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE); List<RunningTaskInfo> runningTasks = systemService.getRunningTasks(1); RunningTaskInfo runningTaskInfo = runningTasks.get(0); ComponentName component = runningTaskInfo.topActivity; String className = component.getClassName(); return className; }
下面講一下指紋識別的api:在6.0及以上的v4包下:
需要在清單文件中添加權限:
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
用到的類有 FingerprintManagerCompat,此類中的api可以檢測您的手機是否有指紋傳感器,手機有沒有錄入過指紋。
AuthenticationCallback,可以繼承此類,分別重寫里面的方法,用來接收指紋識別的結果:
具體的可以下載下面的demo.
地址:demo
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Arduino 數(shù)據(jù)類型轉換(單機片)詳細介紹
這篇文章主要介紹了Arduino 數(shù)據(jù)類型轉換(單機片)詳細介紹的相關資料,需要的朋友可以參考下2016-11-11Android?WebView開發(fā)之自定義WebView工具框
在WebView頁面長按時會彈出一個復制框,有的時候里面的item不是我們想要,這個時候我們就可以自定義一個工具框。本文就將介紹如何通過WebView自定義工具框,需要的朋友可以參考一下2021-12-12