实现防火墙的“电话已关机”,“此号码已停机”,“号码不存在”等提示音的方法

去年做过一个项目,是要在windows mobile手机上做个来电防火墙, 其实原理很简单, 无非是截获来电并检查黑白名单, 按照规则给出相应的提示音, 现在总结一下, 大概有几个方面是关键点:

1. 如何截获来电?

  有几种办法, 一种是底层的RIL函数, 这种方法响应迅速, 不会在拦截电话前还在屏幕上快速闪现一下来电提示窗口,或者是铃声突然响一下再消失. 缺点时RIL函数编程并不容易,如何处理好诸多RIL通知事件,并根据业务逻辑设计良好的程序逻辑是一个不小的挑战;

第二种办法是使用.net compact framework的notification, 包括:SystemProperty.PhoneCallCalling, SystemProperty.PhoneIncomingCall, SystemProperty.PhoneCallTalking.

SystemProperty.PhoneCallCalling: 表示正在呼出中...

SystemProperty.PhoneIncomingCall: 表示现在有电话来到...

SystemProperty.PhoneCallTalking: 表示通话是否建立or挂断?

通过这三个函数的取值组合, 能得到目前电话状态, 是正在拨出?还是有来电?还是电话已接通?还是电话已挂断?

由于我的项目要同时完成多种任务: 来电时要判断是否拦截; 要记录来电号码,来电时间; 通话时要记录通话时长;等等,所以用这种方法单独写一个程序来管理电话功能,效果比较好.

2. 如何定义规则?

就是拦截规则, 这个一般可以照着别人做好的防火墙软件, 无非是黑白名单, 全部拦截还是部分拦截, 还有分时段拦截等等...

3. 保存拦截记录. 

拦截的电话需要记住,包括来电号码, 姓名, 时间. 保存在数据库或文件中.

4. 拦截后自动回复短信.

一般都要给出几条默认的短信, 并且允许用户自定义短信内容. 作为拦截电话后对方的回复, 比如"现在正在开会,稍后回复您"等等.

5. 最考验一个防火墙软件优劣的东西---提示音

你肯定不希望一个你不喜欢的人打你的电话时, 还让他在听筒里听到"嘟..."的一声,然后再告诉他"您拨打的电话已关机"吧??

这篇文章要给大家贡献的最有用的东西也就在这里:

直接告诉对方--“电话已关机”,“此号码已停机”,“号码不存在”, 而不再有任何提示音, 要达到这个目的, 必须用来电转移效果才最好, 因为来电转移是在源头处就把提示音直接播放给呼叫方, 其他任何方法都没有这个方法直接且效果好.

具体实现方法麻烦点,需要在程序里调用 AT指令,这里不详述了,有兴趣的可以去找(也许还有别的办法). 看到这里,你可能已经想到了, 要把来电转移到哪个号码上才能实现--“电话已关机”,“此号码已停机”,“号码不存在”三种提示音呢? 
经过研究, 发现有些软件使用的是这三个号码:“13911950261”, “0 13555555555”, “1351234567”, 不信大家可以用电话打打这三个号码看看. “1351234567”, 很显然, 号码长度不足11位, 当然提示你“号码不存在”了, 呵呵.

posted @ 2009-02-06 14:57  大厨无盐煮  阅读(6374)  评论(17编辑  收藏  举报