手机安全卫士第十天(总结篇)

手机安全卫士第十天实现的功能:

手机程序锁功能。


程序锁的原理:首先创建一个数据库,刚开始所有的程序都不在数据库里面,及查询到的数据都是未加锁应用,用户可以点击加锁按钮进应用进行加锁,点击之后该应用添加到数据库中。


界面实现:首先创建一个应用锁界面,界面包括了两个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值