編輯: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); } }
到這裡,其實我們的關鍵代碼就已經完成了
一、現象一般通過Android webview進行下載文件的方法是1.重寫DownloadListener的onDownloadStart方法,在onDownloadSt
前言定位服務是移動設備上最常用的功能之一,下文以 Android 源碼為基礎,詳細分析了 Android 系統中定 位服務的架構和實現。定位服務是 Android 系統提
今天寫了一個簡單的記憶便箋小程序,但是卻發現在判斷添加數據不能為空的時候,自己的代碼總是不起作用。 String titleStr = addtitle()() Stri
五、指定與驅動相關的信息雖然指定這些信息不是必須的,但一個完整的Linux驅動程序都會指定這些與驅動相關的信息。一般需要為Linux驅動程序指定如下信息。1. 模塊作者: