程序鎖

程序鎖:

監視系統裏面正在開啓的應用程序,如果發現這個應用程序是需要輸入密碼的彈出密碼輸入界面,這就需要一個程序不停的監視系統裏面正在運行的程序.

兩個需求:

1.需要監視系統裏面正在運行的程序

如果你讓一個人去調研的話,最好每隔半天或者一天就讓他彙報一個情況,碰到什麼難點等

實現某一個功能可以從以下幾個角度去考慮

1>.廣播機制,比如發短信,打電話,這個是最簡單的,我們只要創建一個廣播接收者就行了,查看應用可以在<action android:name="查看廣播,有沒有我們要的廣播事件";

2>.會不會系統暴露一個服務,aidl方式,要麼通過getSystemService();

aidl可以查看framework.aidl這裏列出來了所以通過aidl暴露出來的接口或者類去得到當前正在被打開的進程

用服務去得到

 Activitymanger am = getSystemService(ACTIVITY_SERVICE);

 List<RunningTaskInfo> runningtaskInfo = am.getRunningTasks(1);//返回一個正在運行的任務棧的集合信息,集合裏面最多隻有一個元素,這一個元素代表是最近即將要打開的任務

RunningTaskInfo taskinfo = runningtaskInfos.get(0);//獲取第一個任務元素信息

taskinfo.topActivity拿到任務棧棧頂的任務,

taskinfo.topActivity.getPackageName()拿到應用程序的包名

因爲不停的去監視程序所以要在線程的run()方法中while死循環.去獲取當前的應用程序包名,還要讓程序睡200毫秒否則一直在死循環會讓cpu一直運轉,而且也沒有必要.獲取當前應用程序是需要權限的android.permissionGET_TASKS

 

2.如果這個程序是我要保護的程序彈出密碼輸入界面(屏蔽後退鍵)

如果上面判斷是我們要保護的包名,那麼就開啓一個activity

//屏蔽用戶的後退鍵

用onKeyDown()方法,如果是按下的事件, 還要判斷是後退鍵KeyEvent.KEYCODE_BACK,如果成立那麼直接返回true,防止事件繼續往下傳遞

上面程序有問題,如果進入應用程序後,因爲是死循環所以判斷這個程序又是要保護的就又彈出密碼了. 如果用戶密碼輸入正確,需要通知看門狗密碼正確了,你可以暫時的停止對應用程序的保護了,這個實現可以使用一個廣播事件發送一個廣播,服務在接收這個廣播後,定義一個暫時關閉的集合,如果判斷包名在這個集合裏就用continue;跳出當前的集合,不讓他開啓密碼保護界面,在continue上面做一下延時,否則不斷的continue也會消耗很多資源

 

發佈了60 篇原創文章 · 獲贊 9 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章