程序鎖

@Override public void onStart(Intent intent, int startId) {     super.onStart(intent, startId);          //咱們將經過activity管理服務得到當前activity棧的內容     final ActivityManager am=(ActivityManager)getSystemService(ACTIVITY_SERVICE);          //這個intent能夠寫死,由於一直都是轉向這個     final Intent mintent=new Intent();     //flag必須是new task,仔細想一想service與activity的區別就明白了。     mintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);           //這個不用說了     mintent.setClass(getApplicationContext(),LockActivity.class);          //一個線程,讓我一直檢測     AsyncTask taskWatcher=new AsyncTask() {         @Override         protected Object doInBackground(Object... params) {                          //把這個while當成看門狗吧。             while(true){                                  /**咱們只須要得到1個RunningTasks,通常狀況下,會從棧頂按照傳入的個數來獲取                 一個集合,總有一個activity的,不會報空的請放心                 */                 String name=am.getRunningTasks(1).get(0).topActivity.getPackageName();                                  /**判斷當前activity的包是不是屬於受保護的                 固然,實際狀況下是讀取數據什麼的,獲取一個集合                 這個集合一般是提早列出系統全部安裝的apk包,並讓用戶選擇所獲得的                 */                 if(pakageName.equals(name)){                                          /**轉向目標意圖,本身制定                      * 能夠列個輸入框輸密碼什麼的。                      *                       * 在目標activity,要屏蔽返回鍵,由於返回上一個task的棧頂,則                      * 又會返回到這裏,寫代碼又要跑一邊,無心義,若是如輸入密碼對了                      * 則finish驗證activity,會自動返回到用戶指望的activity。                      *                       * 驗證的策略,與經過驗證的實效期,按照本身的需求來制定即刻                      */                     startActivity(mintent);                 }                              try {                     Thread.sleep(100);                 } catch (InterruptedException e) {                     // TODO Auto-generated catch block                     e.printStackTrace();                 }                          }         }     };          taskWatcher.execute(null); }
相關文章
相關標籤/搜索