android 屏蔽指定activity啟動(程式鎖)

來源:互聯網
上載者:User

  某些安全管理類具有程式鎖功能,大致功能是這樣的:安全管理程式列出系統中的所有應用,使用者選定一些想鎖定的程式,並設定好密碼,這樣以後,再運行那些程式會跳轉到一個許可權頁面,要求輸入密碼訪問,或者不訪問並推出。

  如何?呢?

  第一個想法就是寫一個service監測activity 棧,如果棧頂有更改,則判斷其是否為受保護的程式,是,就intent轉向自己定義的認證授權activity;否,則什麼都不做。

找來找去,sdk沒有提供某個回調方法或事件、廣播之類的api,只能自己一直while中檢測。

  於是尋找第二種方法,在源碼中找所有service和aidl,也沒發現callback或者broadcast,activitymanager除了更改源碼,無法在外部讓它具有此類功能。

  native層?暫不考慮。

現在把範例程式碼寫出來,誰知道不用while的方式去檢測activity棧頂情況的方法,請告訴我,謝了。

service 中的代碼:

@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);

}

僅當拋磚引玉,如有不對,望請指正。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.