Microsoft  CSIP   WindowsMobile   MEDC   合作伙伴   体验中心 设为首页 加到收藏夹

 
登录       点击换一张     注册新用户 找回密码

.Net Compact Framework 高级篇(1)
2008年07月09日03:31   编辑:叶帆 来源: 叶帆工作室 浏览: 237

本篇文章主要讲述短信拦截的一些方法,虽然该方法不是最理想的方法,但仍然能够达到相同的功效。
作为高级篇的第一篇文章,希望文中的一些API的使用方法,能够给更多人予以帮助。

在.net 2.0中,MS就提供了Microsoft.WindowsMobile.PocketOutlook.MessageInterception命名空间,通过使用该命名空间,可以截获短信和邮件的到达消息。
该命名空间中的一些类及属性:
1.MessageInterceptor:监控对象类,一旦添加监控事件后,就会对所有消息进行监控。
2.MessageCondition:监控的过滤筛选条件类,通过设置需要过滤某个字段。
3.MessageInterceptorEventHandler:监控事件,一旦截获某消息,就立即执行该方法。
4.InterceptionAction(枚举):
Notify(提示,但此时系统仍会第一时间处理,自定义处理虽然有效,但肯定不是大家想要的。)
NotifyAndDelete(系统不会做任何处理,直接交给用户自己处理,同时达到的消息,如果用户不处理,则会删除。)
5.MessageProperty(枚举):按照某个属性进行对比
6.MessagePropertyComparisonType(枚举):对比方法

运行程序效果如下:

在Menu菜单下,点击Message Intercepter事件,开始监听。在此,我设置了,当发短消息的用户为Test Man时,将短消息过滤,不会在短消息的收件箱中出现,截获的内容这会在界面上显示。

测试:运行Cellular Emulator程序,输入电话号码及短信内容,发送到模拟器上。

模拟器效果如下:

可以看到消息已经被截获了,且消息内容一致。

如果发送号码为123456788,则不是添加的联系人(Test Man)。则不会截获。

代码如下:
 1        private void menuItem4_Click(object sender, EventArgs e)
 2        {
 3            MessageInterceptor msgInterceptor = new MessageInterceptor();
 4            msgInterceptor.InterceptionAction = InterceptionAction.NotifyAndDelete;
 5
 6            MessageCondition msgCondition = new MessageCondition();
 7            msgCondition.ComparisonType = MessagePropertyComparisonType.Contains;
 8            msgCondition.Property = MessageProperty.Sender;
 9            msgCondition.ComparisonValue = "Test Man";
10
11            msgInterceptor.MessageCondition = msgCondition;
12
13            msgInterceptor.MessageReceived += new MessageInterceptorEventHandler(msgInterceptor_MessageReceived);
14        }

15
16        void msgInterceptor_MessageReceived(object sender, MessageInterceptorEventArgs e)
17        {
18            this.listBox1.Items.Add("Type Name: " + e.Message.GetType().Name);
19
20            if (e.Message.GetType() == typeof(SmsMessage))
21            {
22                SmsMessage sms = (SmsMessage)e.Message;
23                this.listBox1.Items.Add("From: " + sms.From.Name);
24                this.listBox1.Items.Add("Body: " + sms.Body);
25                this.listBox1.Items.Add("Received Tiem: " + sms.Received.ToString("yyyy-MM-dd"));
26            }

27            if (e.Message.GetType() == typeof(EmailMessage))
28            {
29                EmailMessage mail = (EmailMessage)e.Message;
30
31                this.listBox1.Items.Add("ItemId: " + mail.ItemId.ToString());
32            }

33        }

Tips:
1.使用MessageInterceptor能监视的只是一个属性,如果根据不同用户,指定不同过滤操作的话,就无法实现。
2.一旦将InterceptionAction设为NotifyAndDelete,则系统就不做处理了,接收到的消息,就不会在收件箱中出现,需要自己添加进去(下文会介绍如何实现)
3.可以不设置MessageInterceptorMessageCondition,这样使得所有消息都截获,然后自己处理,这时,就可以设置更广泛的过滤。

一旦将消息全部截获后,必不可少的会遇到一些不需要过滤的消息,此时,还要将消息重新放入收件箱中。很遗憾,暂时在托管环境中没有相应的操作类,相信MS会在以后的CF版本中会对此进行扩展的。

下面将介绍如何SIM卡的短消息的API。
涉及的API:
SimInitialize方法:初始化SIM卡的对象指针。
SimDeinitialize方法:释放SIM卡指针,类似于Ado里的连接对象,操作完后,关闭对象。
SimGetSmsStorageStatus方法:得到
SIM卡里的可以存放的最大消息个数及已存放的消息个数。
SimReadMessage方法:从SIM卡中读取短信(如果SIM卡有短信)
12末页下一页

发表评论
评论标题 :
评论内容 :

    查看评论

请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。 本站拥有管理笔名和留言的一切权利。
相关文章推荐
· .Net Compact Framework 高级篇(2)-- 扩展SOAP应用 2008-7-9  叶帆
· Net Micro Framework研究—FAT文件系统实现探索 2008-7-1  叶帆
· .NET MicroFramework简介 2007-11-1  刘彦博
· .Net Micro Framework研究 2007-11-1  叶帆工作室

  

论坛推荐  
热点活动
更多»

© CSIP 信息产业部软件与集成电路促进中心 All Rights Reserved 版权所有 京ICP备06020771号
联系电话:010-63951881-8003 王先生        邮件:wangj@csip.org.cn