Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android指紋解鎖示例代碼

Android指紋解鎖示例代碼

編輯:關於Android編程

Android6.0及以上系統支持指紋識別解鎖功能:項目中用到,特此抽離出來,備忘。

功能是這樣的:在用戶將app切換到後台運行(超過一定的時長,比方說30秒),再進入程序中的時候就會彈出指紋識別的界面。用戶輸入指紋,解鎖成功。指紋識別的模塊其實很簡單啦,google的api已經封裝好了,我們只需要學會調用就ok了。

思路:

在用戶將程序切換到後台的時候需要有一個方法計時,這樣的方法寫在哪裡呢,對,要寫在service中。在Activity中開啟服務:

Intent intent = new Intent("com.example.fingureprint.services.JudgeFingureService");
    intent.setPackage(getPackageName());
    startService(intent);

intent.setpackage(getPackageName);在6.0及以上系統中啟動服務必須加上這句。

服務不要忘記在清單文件中注冊幺。

 <!--注冊判斷指紋密碼開啟的服務-->
    <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死循環,讓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;
  }

有一個小細節,當用戶從後台切換到前台,但是用戶沒有解鎖,又切換到後台,過三十秒後切換到前台,這時候不能再跳出手勢解鎖界面了吧。

解決: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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved