3.1 模块概述
3.1.1 功能介绍
通讯卫士模块的主要功能是进行黑名单拦截,对添加到黑名单中的号码进行电话拦截或短信拦截。在添加黑名单时有两种方式,一种是直接在编辑框中输入电话号码以及联系人姓名,另一种是从联系人列表中选择。接下来分别针对这两种方式进行讲解。
1.手动添加
当没有添加黑名单时,会展示通讯卫士主界面,此时点击“添加黑名单”按钮,会进入添加黑名单界面,该界面中可以直接输入联系人号码和姓名,选中电话拦截、短信拦截的复选框,然后点击“添加”按钮,此时会将该号码添加到黑名单数据库中,并将黑名单信息展示到通信卫士主界面中,如图3-1所示。
图3-1 手动输入黑名单信息
2.从列表选择
在添加黑名单界面中,点击“从联系人中添加”按钮时,会跳转到联系人列表界面,点击其中的任意一个联系人,此时该联系人的电话号码和姓名会显示在添加黑名单界面的编辑框中,点击下方的“添加”按钮,可将该号码添加到黑名单中,并在主界面中展示,如图3-2所示。
图3-2 从联系人列表添加黑名单
3.1.2 开发流程图
通讯卫士模块的开发流程有些复杂,为了让大家更好地理解该模块的逻辑,接下来绘制一个流程图,具体如图3-3所示。
图3-3 通讯卫士模块流程图
从图3-3可以看出,当进入通讯卫士界面时,首先会判断是否有黑名单,如果有则在主界面中显示黑名单列表,否则显示“您还没有添加黑名单”。添加黑名单有两种方式:一种是直接添加;另一种是从联系人列表中选择,然后指定电话拦截或者短信拦截后添加黑名单,此时黑名单信息就会展示在主界面中。
3.1.3 代码结构
通讯卫士模块代码量较大,主要逻辑包括两套主界面布局的动态切换、选择联系人、黑名单数据库的增删查、ListView的分页查询等,通过一个图例来展示通讯卫士模块的代码结构,如图3-4所示。
图3-4 chapter03代码结构
下面按照结构顺序依次介绍chapter03包中的文件,具体如下:
●BlackContactAdapter.java:用于填充黑名单的数据适配器;
●ContactAdapter.java:用于填充手机联系人信息的数据适配器;
●BlackNumberDao.java:用于对黑名单中的数据进行增、删、查等操作;
●BlackNumberOpenHelper.java:用于创建黑名单数据库,继承自SQLiteOpenHelper;
●BlackContactInfo.java:用于存储黑名单信息的实体类,包括phoneNumber、contactName字段以及拦截模式;
●ContactInfo.java:联系人信息的实体类,包括id、name、phone字段;
●InterceptCallReceiver.java:拦截电话的广播接收者;
●InterceptSmsReceiver.java:拦截短信的广播接收者;
●TestBlackNumberDao.java:操作黑名单数据的测试类;
●ContactInfoParser.java:联系人信息的解析器,用于从系统通讯录中读取联系人信息;
●AddBlackNumberActivity.java:添加黑名单界面;
●ContactSelectActivity.java:显示系统联系人界面;
●SecurityPhoneActivity.java:显示黑名单信息界面。
需要注意的是,通讯卫士模块中的电话拦截功能涉及进程间通信,因此在第3章中引入了两个AIDL文件: ITelephony.aidl和NeighboringCellInfo.aidl,这两个文件分别位于android.telephony包和com.android.internal.telephony包中。在开发电话拦截功能时,需要创建这两个包将AIDL文件复制到工程中。