Symbian OS应用开发--SMS的故事(一)

摘要:SMS(短消息服务)是GSM规范的一部分。Symbian OS SMS实现基于SMS规范的ETSI GSM 03.40 v7.4.0 Technical实现。(可从中下载该规范)因为我们的主要工作主要是读取、新建、修改、删除等操作,所以我们本篇文章的重点放在这些操作上,在文章的结束部分,我们也会简单的谈及有关SMS的发送。首先和以前各篇文章一样,我们先简要介绍几个重要的类:CMsvSession该类代表客户端(客户端MTM、用户接口MTM或者客户端消息应用程序)与消息服务器端的通讯通道。每一个客户端线程对应一个该类的实例,CMsvSession提供客户端能及时获取消息服务端消息的有效方式。一个消息客户端应用必须在正常使用任何MTM或CMsvEntry对象前,使用OpenSyncL()或者OpenASyncL()来新建一个session对象。CClientMtmRegistryRegistry掌握了客户端所有目前可用的MTM有关的细节,消息客户端可以使用该类获得从CBaseMtm继承de对象。CBaseMtm这个类主要用来操作sms的内容,比如可以新建、修改sms;具体是使用方法下面将会借助代码说明,更详细的内容你也可以查看具体sdk的help。CMsvEntry相当于一个特定消息服务器的入口,当前entry与其的具体内容相关联。CMsvEntry包含两个部分的功能:一是可以允许访问与这个entry关联的,不同类型的数据;而是运行访问它的子entry。该类只在客户端使用,服务器端使用CMsvServerEntry。TMsvEntry用于代表消息服务器的一个入口,主要用于sms的新建。下面还是看几段例程吧:)

TMsvSelectionOrdering sort;sort.SetShowInvisibleEntries(ETrue); //全部内容排序,包括隐藏//设置入口为outbox,也就是发信箱CMsvEntry* entry = CMsvEntry::NewL(*iSession,KMsvGlobalOutBoxIndexEntryId,sort);CleanupStack::PushL(entry);//选择全部内容CMsvEntrySelection* entries = entry->ChildrenL();CleanupStack::PushL(entries);TTime time;//得到首信息的时间,At(0)代表首信息,取其他的可以给出相应的indextime = entry->ChildDataL(entries->At(0)).iDate;//弹出对话框,有首信息接收人的号码信息CAknInformationNote* informationNote = new (ELeave) CAknInformationNote;informationNote->ExecuteLD(entry->ChildDataL(entries->At(0)).iDetails);CleanupStack::PopAndDestroy(2);

------------------------------------------注意:一些变量没有做介绍,比如iSession,这是因为前面的文章有提到过!------------------------------------------上面这段例程的作用就是让大家了解一下如何获取并操作sms。简单说一下:首先定义一个消息服务器的入口,关联着outbox;然后取出outbox中所有的短信内容,并存储到CMsvEntrySelection型指针指向的list中,操作list便可方便的操作outbox中的sms。下面讲述了如果取单个sms的具体内容,这些都是公共变量,可以利用它们来获取sms的具体细节:------------------------------------------TTime iDate (类型和名称)Time (描述)短信时间——————————————————————————–TPtrC iDescriptionDescription 短信内容——————————————————————————–TPtrC iDetailsDetails 发送或接受人号码——————————————————————————–TInt32 iErrorError——————————————————————————–TUid iMtmMTM——————————————————————————–TInt32 iMtmData1MTM data 1: this can be used for any purpose by an MTM.——————————————————————————–TInt32 iMtmData2MTM data 2: this can be used for any purpose by an MTM.——————————————————————————–TInt32 iMtmData3MTM data 3: this can be used for any purpose by an MTM.——————————————————————————–TMsvId iRelatedIdRelated folder ID.——————————————————————————–TMsvId iServiceIdService ID.——————————————————————————–TInt32 iSizeSize 短信大小——————————————————————————–TUid iTypeEntry type——————————————————————————–TInt32 iWdpPortNumberPort number——————————————————————————–TInt32 iBioTypeBIO message type------------------------------------------通过使用上述变量就可以取得sms中的所有信息,我只对经常使用的几个做了介绍,,剩下的当大家使用到时可以详细研究一下。上面的一段例程很简单、也很清楚,使用起来也会比较方便,接下来使用上面的方法我们可以同样实现delete操作:

TMsvSelectionOrdering sort;sort.SetShowInvisibleEntries(ETrue);CMsvEntry* entry = CMsvEntry::NewL(*iSession,KMsvDraftEntryId,sort);CleanupStack::PushL(entry);CMsvEntrySelection* entries = entry->ChildrenL();CleanupStack::PushL(entries);TInt i = entries->Count();for(TInt ncount=0;ncount<i;ncount++)entry->DeleteL(entries->At(ncount));// information to the useriEikonEnv->InfoMsg(_L(“DeleteAll Done!”));CleanupStack::PopAndDestroy(2);

如果你已经理解了上面的读取sms信息的操作,这个全部删除也就不难理解了。所不同的只是调用了一个DeleteL()函数,这个函数是在类CMsvEntry中定义的,它可以删除固定index位置的sms。详情可以查看相关sdk help有了上面的了解,不难看出sms的操作其实和我们上一讲所说的vCard有类似之处,下面我们来看看如何将sms的内容导出到文件。这里会用到类CBaseMtm,看下面例程:

人的不幸缘于欲望,所以知足者长乐。

Symbian OS应用开发--SMS的故事(一)

相关文章:

你感兴趣的文章:

标签云: