手机安全卫士第十天实现的功能:
手机程序锁功能。
程序锁的原理:首先创建一个数据库,刚开始所有的程序都不在数据库里面,及查询到的数据都是未加锁应用,用户可以点击加锁按钮进应用进行加锁,点击之后该应用添加到数据库中。
界面实现:首先创建一个应用锁界面,界面包括了两个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
>相同的控件的样式抽取出来
>提取公共的逻辑
>定义抽象方法
25. 手势识别器
>GestureDector
26. activity切换的动画
>overridePendingTransition(R.anim.in,R.anim.out);
>电话管理器服务
>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