手機安全衛士第十天實作的功能:
手機程式鎖功能。
程式鎖的原理:首先建立一個資料庫,剛開始所有的程式都不在資料庫裡面,及查詢到的資料都是未加鎖應用,使用者可以點選加鎖按鈕進應用進行加鎖,點選之後該應用添加到資料庫中。
界面實作:首先建立一個應用鎖界面,界面包括了兩個Fragment,點選文字"已加鎖"跳轉到已加鎖Fragment界面,點選"未加鎖"跳轉到未加鎖Fragment界面,這兩個界面都是由應用程式組成,差別就是在不在資料庫中,兩個界面都是使用ListView構成和前面寫過的應用程式和程序大同小異(代碼見附件)。
加鎖之後本應該建立一個服務,在設定中心中提供給使用者選擇師傅開啟服務,若開啟了服務那麼點選了加鎖的應用程式會跳轉到一個界面上,在這個界面要求使用者輸入秘密,若密碼正确則能夠正常進入程式,若不正确則一直停留在該界面,值得注意的是,如果這個界面的啟動模式不是 singleInstance, 那麼輸入密碼之後會跳轉到前一個應用的界面,所有需要給這個界面設定一個啟動模式。activity的四種啟動模式如下:
<span style="font-size:14px;"> standard
模式啟動模式,每次激活Activity時都會建立Activity,并放入任務棧中。
. singleTop
如果在任務的棧頂正好存在該Activity的執行個體, 就重用該執行個體,否者就會建立新的執行個體并放入棧頂
(即使棧中已經存在該Activity執行個體,隻要不在棧頂,都會建立執行個體)。
. singleTask
如果在棧中已經有該Activity的執行個體,就重用該執行個體(會調用執行個體的onNewIntent())。重用時,
會讓該執行個體回到棧頂,是以在它上面的執行個體将會被移除棧。如果棧中不存在該執行個體,将會建立新的執行個體放入棧中。
. singleInstance
在一個新棧中建立該Activity執行個體,并讓多個應用共享改棧中的該Activity執行個體。
一旦改模式的Activity的執行個體存在于某個棧中,任何應用再激活改Activity時都會重用該棧中的執行個體,
其效果相當于多個應用程式共享一個應用,不管誰激活該Activity都會進入同一個應用中。</span>
回顧手機安全衛士用過的知識點:
1. PackageManager
>包管理器,擷取手機裡面每個apk的資訊(清單檔案資訊)
2. 網絡請求
> * URL
> * HttpUrlConntetion
3. JSON解析
> * JSONObject
> * JSONArray
> * GSON
4. 對話框彈出
> AlertDialog
> AlertDialog.Builder
5. 代碼的組織結構
> * 按照業務邏輯
> * 按照代碼的的類型
6. 幾種上下文差別
> * getApplicationContext();
> * xxxActivity.this
> * getContext(); 虛拟的上下文
7. ANR(應用程式無響應)
> 耗時的操作 放在子線程
8. 子線程更新UI
> * Handler + message
> * runOnUiThread(runnable)
9. 自定義的土司
> 子線程列印土司
10. 動畫效果
> * alpha
> * trans
> * scale
> * rotate
11. 覆寫安裝
> * 包名一緻
> * 簽名一緻
12. 安裝apk
<span style="font-size:14px;">Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.setDataAndType(Uri.fromFile(new File(Environment
.getExternalStorageDirectory(), "temp.apk")),
"application/vnd.android.package-archive");
startActivityForResult(intent, 0);</span>
13. 多線程斷點下載下傳的開源項目
> * afinal
> * xutils
14. GridView
15. ListView
16. Adpater資料擴充卡
> * BaseAdapter
17. 布局填充器服務
> * View.inflate();
> * getSystemService();
> * LayoutInflater.from();
18. 狀态選擇器 xml
> xxxselector.xml
> 根據不同的狀态顯示不同的背景
19. 簡單的自定義控件
20. 自定義對話框
>設定對話框顯示的view對象
21. 密碼資料加密
>md5算法
22. 複雜ui寫法
>由簡單的布局組合起來
23. 樣式 style
>相同的控件的樣式抽取出來
24. 抽取父類
>提取公共的邏輯
>定義抽象方法
25. 手勢識别器
>GestureDector
26. activity切換的動畫
>overridePendingTransition(R.anim.in,R.anim.out);
27. TelephonyManager
>電話管理器服務
>getSystemService();
>擷取sim串号
28. SharedPerference
>參數:儲存配置檔案。
29. 廣播接受者
> 開啟啟動的廣播接受者。
> 檢查sim是否發生變化(手機防盜的原理)
30. 短信廣播接受者
>有序廣播,可以中斷攔截,設定優先級
>無序廣播,不可以别攔截
31. 多媒體播放
>MediaPlayer
32. 手機定位的方式
>* GPS
>* WIFI
>* 基站
33. 火星坐标系統
>中國地圖經緯度都是偏移過的
34. 服務
>沒有界面,背景長期運作
>stopSelf();停止服務
35. 自定義組合控件
> * 自定組合控件
> * 自定義屬性
> <declare-styleable name="SettingView">
<attr name="title" format="string" />
<attr name="desc" format="string" />
</declare-styleable>
>* 聲明命名空間
> xmlns:itheima="http://schemas.android.com/apk/res/com.itheima.mobileguard"
36. 資料庫
> * 建立
> * 增删改查
37. ListView的優化
> * 複用緩存的view對象 convertView
> * 減少子孩子被查詢的次數 viewHolder
38. 資料庫顯示方式
> * 分頁加載資料(記憶體問題)
> * 分批加載資料 (使用者體驗)
39. 資料庫内容和listview的同步顯示
> adapter.notfiyDataSetChange();
40. 事件的傳遞
> 外--->内--->外
41. 短信和電話攔截
> 短信攔截 基于号碼,關鍵字 廣播接受者攔截
> 電話攔截 反射調用隐藏的API
42. 删除呼叫記錄
> getContentResolver 内容提供者的解析器。
43. 内容觀察者
> 觀察呼叫記錄的生成
44. startActivityForResult
> 開啟activity擷取傳回值
45. 動畫插入器
> cycleInterpolator
46. Verbose 服務
>系統服務 震動服務
47. 使用外部的資料庫檔案
> * 放在asset目錄
> * splash界面拷貝到系統目錄
> * SQLiteDataBase.openDataBase(path,factory,mode);
48. 資料庫的優化
> 提取備援資料
49. 正規表達式
> ^1[34578]\d{9}$
50. 土司的原理
> 窗體管理器
> windowManager
51. 觸摸事件
> 根據觸摸情況,移動控件的位置。
52. 内容提供者操作短信
53. 抽取接口定義回調函數(重要)
> 通過接口定義回調函數
> 回調函數就是不是我們的代碼實作,而是由别的代碼去實作。
54. 快捷圖示
>發送廣播,讓桌面建立快捷方式
55. 複雜listview的界面顯示
> 應用程式item
> 文本item
> 控制條目的位置
56. listview的滾動監聽器
57.啟動應用
58.分享應用
59.檢視應用資訊
60. activityManager
>getSystemService();
>活動管理器
>擷取正在運作的程序
>擷取正在運作的服務
>擷取目前手機的任務棧資訊
61. 帶checkbox的listview
>禁用checkbox的點選事件
>取消checkbox的焦點
62. 自定義控件的風格
> 修改checkbox
> 修改進度條
> 修改textview
> 找到sdk 的res目錄下的style.xml
63. 殺死程序
> * 殺死别人 am.killBackgroudProcess();
> * 自殺 android.os.Process.kill(pid);
64. 周遊集合的時候不可以修改目前集合的大小
65. 特殊的廣播接受者
> 隻能用代碼注冊才會生效
> 電量變化, 螢幕鎖屏的廣播接受者
66. 任務棧
> 一般情況一個應用程式一個任務棧
> 手機裡面有很多個任務棧
> 使用者操作的應用程式的任務棧在最前面
67. activity的啟動模式
> * singletop
> * singleinstance
> * singletask
> * standard
68. 防毒軟體的原理
> * 特征碼+資料庫
> * 主動防禦 軟體的行為
69. 橫豎屏切換的生命周期
70. 資料庫的自動更新
> 基于版本号 更新sql語句
終于完成了這個項目,自學android也有好幾個月了,算是基礎不怎麼好的,完成的也比較累,還有幾個功能都是沒有實作的,以後會越來越好的
GitHub下載下傳位址:https://github.com/AndroidDai/mobliesafe