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
{
//系统自己处理
}
}