01_联系人电话日志短信日志导入黑名单
手动导入联系人:弹出对话框,让用户输入
02_三个功能的总结
电话日志 联系人日志 短信日志
1.抽取基类
通过分析,三个功能类似,只是数据不一样(initData())
2. 获取电话日志
不能直接访问DB,需要内容提供者
3. 获取电话日志
03_黑名单拦截服务的启动和关闭
对短信和电话做拦截处理:
收到短信,接到电话,通过服务监控到短信号码和电话号码,分析黑名单数据库,是否需要拦截
1.创建服务,来监控电话和短信
2.打开或者关闭该服务
04_问题讲解
二进制(运行的原理,但是不能表示) 八进制(0打头) 十六进制(0x打头)
十进制
在计算机中负数通过补码来表示
最高位表示符号位
如:byte 类型 157 二进制 1001 1101 是负数 ,补码来表示
补码 到 源码 符号位不变 按位取反 + 1
1001 1101
1 110 0011
05_黑名单短信拦截
只需判断标识位即可
06_黑名单bug处理
07_链表
08_通过反射加aidl挂断电话
对短信和电话做拦截处理:
3.短信拦截,查询黑名单号码
4.电话拦截
类的修饰符只有 "public"和"省略":类的关系只有同包和不同包
AIDL:
反射 调用Android OS包里的类:
-
获取class类型
a.类型.class eg:String.class
b.Class.forname("类名");
c.obj.getclass;
-
获取method
class.getDe…..
-
产生对象(非静态方法)
class.newInstance…
-
调用
method.invoke(obj…
例子:
AIDL所在目录:
android.telephony
com.android.internal.telephony
AIDL文件目录必须和里面的包名保持一致:
import com.android.internal.telephony.ITelephony.ITelephony;
09_通过内容观察者删除电话日志
删除日志:
不能通过睡眠来删除日志,应该注册内容观察者来删除电话日志
10_手机归属地数据库拷贝和业务类的封装
核心:电话归属地的数据库
数据库文件比较大,应该放在assert中,只增大APK的体积,不影响APK的功能
放到assert目录下的文件不能直接访问,需要 把文件拷贝到本地,才能使用
文件拷贝到本地(耗时的操作,只拷贝一次):放在Splash界面
归属地业务封装:
11_号码归属地查询
12_监听文本变化
-
监听文本的动态变化:
mEt_phone.addTextChangedListener(new TextWatcher() {
@Override**********************
public void afterTextChanged(Editable editable) {
// 文本改变
locationQuery();
}
13_抖动的效果
14_震动的效果