Android指紋解鎖示例代碼
Android6.0及以上系統(tǒng)支持指紋識(shí)別解鎖功能:項(xiàng)目中用到,特此抽離出來(lái),備忘。
功能是這樣的:在用戶將app切換到后臺(tái)運(yùn)行(超過(guò)一定的時(shí)長(zhǎng),比方說(shuō)30秒),再進(jìn)入程序中的時(shí)候就會(huì)彈出指紋識(shí)別的界面。用戶輸入指紋,解鎖成功。指紋識(shí)別的模塊其實(shí)很簡(jiǎn)單啦,google的api已經(jīng)封裝好了,我們只需要學(xué)會(huì)調(diào)用就ok了。
思路:
在用戶將程序切換到后臺(tái)的時(shí)候需要有一個(gè)方法計(jì)時(shí),這樣的方法寫在哪里呢,對(duì),要寫在service中。在Activity中開啟服務(wù):
Intent intent = new Intent("com.example.fingureprint.services.JudgeFingureService");
intent.setPackage(getPackageName());
startService(intent);
intent.setpackage(getPackageName);在6.0及以上系統(tǒng)中啟動(dòng)服務(wù)必須加上這句。
服務(wù)不要忘記在清單文件中注冊(cè)幺。
<!--注冊(cè)判斷指紋密碼開啟的服務(wù)-->
<service
android:name="com.example.fingureprint.services.JudgeFingureService"
android:enabled="true">
<intent-filter >
<action android:name="com.example.fingureprint.services.JudgeFingureService"/>
</intent-filter>
</service>
在服務(wù)中onStart()開啟一個(gè)線程:
new Thread(){
public void run() {
try {
while(true){
Thread.sleep(1000);
if(isAppOnForeground()){
Log.i("前臺(tái)運(yùn)行", "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("后臺(tái)運(yùn)行", "time"+countnumber);
countnumber ++;
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
};
}.start();
計(jì)時(shí)用了個(gè)while死循環(huán),讓thread睡一秒。哈哈,沒(méi)有用Handler是不是很簡(jiǎn)單。
判斷程序是否在后臺(tái)運(yùn)行:
/**
* 判斷程序在前臺(tái)運(yùn)行的方法
* @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;
}
有一個(gè)小細(xì)節(jié),當(dāng)用戶從后臺(tái)切換到前臺(tái),但是用戶沒(méi)有解鎖,又切換到后臺(tái),過(guò)三十秒后切換到前臺(tái),這時(shí)候不能再跳出手勢(shì)解鎖界面了吧。
解決:1.設(shè)置下手勢(shì)界面的啟動(dòng)方式。2.檢測(cè)程序的當(dāng)前運(yùn)行界面。
/**
* 判斷當(dāng)前運(yùn)行在前臺(tái)的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;
}
下面講一下指紋識(shí)別的api:在6.0及以上的v4包下:
需要在清單文件中添加權(quán)限:
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
用到的類有 FingerprintManagerCompat,此類中的api可以檢測(cè)您的手機(jī)是否有指紋傳感器,手機(jī)有沒(méi)有錄入過(guò)指紋。
AuthenticationCallback,可以繼承此類,分別重寫里面的方法,用來(lái)接收指紋識(shí)別的結(jié)果:
具體的可以下載下面的demo.
地址:demo
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
如何在Android中實(shí)現(xiàn)斷點(diǎn)續(xù)傳功能
隨著移動(dòng)端用戶越來(lái)越依賴視頻、文件下載以及大文件傳輸,斷點(diǎn)續(xù)傳作為一種有效節(jié)省帶寬和提高用戶體驗(yàn)的技術(shù)應(yīng)運(yùn)而生,本項(xiàng)目旨在實(shí)現(xiàn)一個(gè)基于?Android?的斷點(diǎn)續(xù)傳功能,需要的朋友可以參考下2025-04-04
Android嵌套R(shí)ecyclerView左右滑動(dòng)替代自定義view
這篇文章主要介紹了Android嵌套R(shí)ecyclerView左右滑動(dòng)替代自定義view,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06
Android UI設(shè)計(jì)系列之自定義ViewGroup打造通用的關(guān)閉鍵盤小控件ImeObserverLayout(9)
這篇文章主要介紹了Android UI設(shè)計(jì)系列之自定義ViewGroup打造通用的關(guān)閉鍵盤小控件ImeObserverLayout,具有一定的實(shí)用性和參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
Android實(shí)現(xiàn)支付寶手勢(shì)密碼功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)支付寶手勢(shì)密碼功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Android基于ViewPager實(shí)現(xiàn)類似微信頁(yè)面切換效果
這篇文章主要介紹了Android基于ViewPager實(shí)現(xiàn)類似微信頁(yè)面切換效果,通過(guò)Fragment適配器實(shí)現(xiàn)頁(yè)面切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05

