首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Windows Mobile >

MessageInterceptor简直就是个笑话,高手初学者都来看看

2012-09-10 
MessageInterceptor简直就是个笑话,高手菜鸟都来看看看了Mobile5的SDK,有个MessageInterceptor类可以截获

MessageInterceptor简直就是个笑话,高手菜鸟都来看看
看了Mobile5的SDK,有个MessageInterceptor类可以截获短信,于是想自己做个PPC的短信防火墙功能玩玩,基本思路:

if (号码是黑名单号码) then
  拦截短信,把短信复制到自定义文件夹下
else
  普通短信,系统按正常方式处理


于是就写了下面的代码:

load的时候,实例化:
MsgInter = new MessageInterceptor(InterceptionAction.NotifyAndDelete);  
MsgInter.MessageReceived += new MessageInterceptorEventHandler(MsgInter_MessageReceived);

委托中处理短信:
void MsgInter_MessageReceived(object sender, MessageInterceptorEventArgs e)
{
  SmsMessage RecvMsg = (SmsMessage)e.Message;
  if (RecvMsg.Body == "1")
  {
  MessageBox.Show(((SmsMessage)e.Message).Body);
  }
  else
  {
  //系统自己处理
  }
}

**************************************************************
里面代码随便写的。。
就是短信内容是“1”的时候拦截掉,手机不响铃,也不放到收件箱里,直接用一个Messagebox显示出来——这个没问题。。。
最可笑的问题在后面。。。如果是没问题的短信呢?我想让系统自己去正常的处理。。结果不行了。。因为你在初始化的时候
MsgInter = new MessageInterceptor(InterceptionAction.NotifyAndDelete)
自己的程序拦截掉以后。。就delete掉了。。你这时候再想让系统处理。。系统处理不了了。。无语。。。

如果你 MsgInter = new MessageInterceptor(InterceptionAction.Notify)
的话。。你自己的程序和系统是同时接到消息的。。。又起不到防火墙的作用了。。


如果这样的话。。。这个MessageInterceptor简直就是个笑话啊。。。微软的设计师太差了。。。




[解决办法]
二楼的说法是正确的.你还要正确的设置MessageCondition 条件才可以.如果你想实现你的功能,应该这么写

MessageInterceptor MsgInter = new MessageInterceptor(InterceptionAction.NotifyAndDelete, true);
MessageCondition MsgCondi = new MessageCondition();

//先设置拦截条件:
MsgCondi.Property = MessageProperty.Body;
MsgCondi.ComparisonType = MessagePropertyComparisonType.StartsWith;
MsgCondi.CaseSensitive = true;
MsgCondi.ComparisonValue = "1";

MsgInter.MessageCondition = MsgCondi;
MsgInter.MessageReceived += new MessageInterceptorEventHandler(MsgInter_MessageReceived);

//处理短信
void MsgInter_MessageReceived(object sender, MessageInterceptorEventArgs e) 

SmsMessage RecvMsg = (SmsMessage)e.Message; 
if (RecvMsg.Body == "1") 

MessageBox.Show(((SmsMessage)e.Message).Body); 

else 

//系统自己处理 


热点排行