Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> android安全問題(二) 程序鎖

android安全問題(二) 程序鎖

編輯:Android開發教程

某些人有時候會有這樣一種需求,小A下載了個軟件,只是軟件中的美女過於誘惑與暴露,所以他不想讓 別人知道這是個什麼軟件,起碼不想讓別人打開浏覽。而這款軟件又沒有鎖,任何人都可以打開,腫麼辦呢? 如果打開它的時候需要輸入密碼,那該多好阿!於是,程序鎖這種應用就產生了

程序鎖不是最近才有 的,很久之前android就有這種apk了

這一期我們來苛刻如何實現程序加鎖功能

首先,我們先明 確一下我們要做的程序具有什麼功能

1可以選擇需要加鎖的程序

2可以設置密碼

3可以關 閉程序鎖

這裡作為演示,我們就盡量簡化代碼

我們先說最關鍵的部分

最關鍵的地方在 於:當用戶打開一個應用的時候,怎麼彈出密碼頁面?

這裡沒有什麼太好的辦法,需要掃描task中的 topActivity

首先,我們先獲得運行的task

mActivityManager = (ActivityManager) 

context.getSystemService("activity");  
//mActivityManager.getRunningTasks(1);//List<RunningTaskInfo>

getRunningTasks方法 返回一個List,我們來看看這個List是什麼
getRunningTasks 寫道
Return a list of the tasks that are currently running, with the most recent being first and older ones after in order.
……

返回的List是有序的,第一個是最近的,所以我們取出第一個即可,然後得到此task中的最上 層的Activity

ComponentName topActivity = mActivityManager.getRunningTasks (1).get(0).topActivity;

topActivity居然是ComponentName類型,下面的事情就好辦了,獲得包名 和類名

ComponentName topActivity = mActivityManager.getRunningTasks(1).get

(0).topActivity;  
String packageName = topActivity.getPackageName();  
String className = topActivity.getClassName();  
Log.v(TAG, "packageName" + packageName);  
Log.v(TAG, "className" + className);  
      
if (testPackageName.equals(packageName)  
        && testClassName.equals(className)) {  
    Intent intent = new Intent();  
    intent.setClassName("com.example.locktest", "com.example.locktest.PasswordActivity");  
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
    mContext.startActivity(intent);  
}

由於我沒有選擇程序這一步,所以我就固定一個應用做測試,這裡選擇的是htc的note應用

String testPackageName = "com.htc.notes";  
String testClassName = "com.htc.notes.collection.NotesGridViewActivity";

下面我們該想, 這段代碼何時執行了

打開一個應用程序,系統不會發送廣播,我們無法直接監聽,所以這裡我們采取 定時掃描的策略

這裡只是一個簡單的實現,之後我們再討論優化

我們采取每秒中檢查一次task 的方式,這裡使用Timer吧,用Handler也一樣可以實現

private Timer mTimer;  
private void startTimer() {  
    if (mTimer == null) {  
        mTimer = new Timer();  
        LockTask lockTask = new LockTask(this);  
        mTimer.schedule(lockTask, 0L, 1000L);  
    }  
}

到這裡,其實我們的關鍵代碼就已經完成了

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