同步Windows Mobile SIM卡短信

来源:互联网 发布:手拉鸡专卖网淘宝付款 编辑:程序博客网 时间:2024/04/30 10:15

同步Windows Mobile SIM卡短信

作者:金海建

背景:Windows Mobile默认情况下,SIM卡中的短信会同步到系统的短信数据库中。这个工作是由cprog.exe(电话程序)来完成,当插卡开机,注册到网络后(或者手机使用中由飞行模式进入待机模式),cprog.exe会删除数据库中带有SIM短信标志的记录,然后从SIM卡导入新的内容。由于项目需要,我们不让cprog.exe运行,那么完成短信导入的工作,只能交给自己的程序来处理。

涉及内容:SIM APICEMAPICEDB

难点分析:我们在短信界面操作SIM卡短信的时候,可以直接对SIM短信进行删除、复制的动作。就删除动作而言,其实进行了两个操作:首先是从短信数据库中读取其在SIM卡上存储的索引,然后调用SimDeleteMessage删除SIM短信。删除完SIM卡短信,等返回成功后,然后删除数据库中的内容。所以一条SIM卡短信要同时删除数据中的记录还要删除SIM卡上的记录。那么问题来了,系统是如何知道是一条SIM卡短信的,又是如何知道其在SIM卡上的索引呢。我们在复制短信的时候,调用SimReadMessage,如果能够读取到短信,我们就知道了它在SIM卡上的索引。我们需要把整个索引号存入短信数据库。在Windows Mobile中,我们可以用CEMAPI来对短信进行操作。用IMessage把每条SIM卡短信的记录内容都打印出来,然后进行仔细的对比分析,最终找出如下区别:

SIM短信标志:字段PR_MESSAGE_CLASS,该字段可以在mapitags.h中找到。用“IPM.SMStext”表示普通短信,用”IPM.SMStext.SIM”标志SIM卡短信。

SIM卡短信索引:字段PR_SMSSTORAGE_ID,该字段微软没有定义,是自己通过比较找出来的。用下面这个宏来定义

#define PR_SMSSTORAGE_ID        PROP_TAG( PT_LONG,      0x825C)

实现:通过上面的分析,用代码实现起来就很容易了,无法就是调用SIM APICEMAPICode如下(代码不全,只是贴了重要的部分)

 

下一篇会讲解如何同步SIM卡联系人。

原创粉丝点击