Chinaunix首页 | 论坛 | 博客
  • 博客访问: 543575
  • 博文数量: 1345
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 14830
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-14 20:32
文章分类

全部博文(1345)

文章存档

2010年(1345)

我的朋友

分类:

2010-11-01 18:53:42

  去年做过一个项目,是要在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位, 当然提示你“号码不存在”了, 呵呵. 如果喜欢实现防火墙的“电话已关机”,“此号码已停机”,“号码不存在”等提示音的方法请收藏或告诉您的好朋友.
阅读(167) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~