symbian messing system 简介
1 在symbian系统中,短信息有一个一个的entry组成,每个entry都有一个唯一的ID,通常用TMsvId 类型表示 。一个entry可以为四种类型 (1) folder ( 2) message (3) attachment (4 ) a service entry
2 一个entry 可以包含其他的entry ,当然自己也可以为另一个entry的子entry , 这就形成了一个和文件系统类似的树结构系统。
3 其中树的根节点为 RootIndexEntry 在树节点下有四个 子节点 ,分别为 Inbox , OutBox , Draft , SentBox 就是我们常用的收件箱,发件箱,草稿箱,等等。
4 service entry 是一类特殊的entry ,包含许多特殊的信息如 (1) 服务 (2)账号 。 通常只有一个。 但是也可以由多个,比如每一个email entry 都有一个service entry都有一个sevice entry ,MMS entry 也有多个,但是sms通常只有一个。
二 信息索引
1 messing server 通常维护一个对各种信息通用的entry索引,当服务器运行的时候,索引被读入内存,只有当系统出现故障的时候才把索引放到文件存储中。 索引中存储的只是每个消息的轻量级信息,诸如大小,日期 ,类型等等。 这样就能快速的得到每个entry的概要信息 ,从而使收件箱快速的展示每一串短信,TMsvEntry 就是表示上述索引的类。
三实际存储
在messaging system 中每个entry都有一个实际存储,这个实际的存储就有了类型的差别。通常每个message entry 用这个实际存储来存储消息的正文和消息头。而service entry 则存储配置信息,附件也存储在这个entry中,通常用CMsvStore来表示这个这个存储。
通常通过CMsvSession 的GetEntryL(TMsvId aEntryId); 来获得CMsvEntry 的引用,例如你要是想得到rootentry ,那么你就需要传递KMsvRootIndexId (在MSCIDS.h)中定义 。
四 在messaging system中增加自己定义的folder
这种自己定义的文件夹和收件箱,草稿箱,发送箱是一个等级的。方法如下(找了好久才找到的):
在msvids.h 中增加以下一项
const TMsvId KMsvMyFoldersEntryId=KMsvMyFoldersEntryIdValue;
在msvstd.hrh中增加以下一项
#define KMsvMyFoldersEntryIdValue 0x1008
TMsvId msvServId;
CMsvEntry *
entry1 =
NULL
;
CMsvEntry *
rootEntry =
NULL
;
CMsvEntry *
entryRootService =
NULL
;
TInt newFldrID =
0
;
//Get the entry (whatever is passed in)
entry1 =
iSmsMtm-
>
Session(
)
.GetEntryL
(
KMsvMyFoldersEntryIdValue)
; 自己定义的文件ID ,就是上述在系统头文件中修改的
CleanupStack::
PushL
(
entry1)
;
if
(
entry1)
{
msvServId =
entry1-
>
OwningService(
)
;
//得到父目录的ID
entryRootService =
iSmsMtm-
>
Session(
)
.GetEntryL
(
msvServId)
;
//这句不知道有什么用
CleanupStack::
PushL
(
entryRootService)
;
rootEntry =
iSmsMtm-
>
Session(
)
.GetEntryL
(
msvServId)
;
//得到你要创建目录的父目录的CMsvEntry对象
CleanupStack::
PushL
(
rootEntry)
;
rootEntry-
>
SetEntryL(
KMsvMyFoldersEntryIdValue)
;
// set to parent
TMsvEntry newServiceEntry;
TTime ttime;
ttime.HomeTime
(
)
;
newServiceEntry.iDate
=
ttime;
newServiceEntry.iSize
=
0
;
newServiceEntry.iType
=
KUidMsvFolderEntry;
newServiceEntry.iMtm
=
KUidMsvLocalServiceMtm;
newServiceEntry.iServiceId
=
iSmsMtm-
>
ServiceId(
)
;
newServiceEntry.iDetails
.Set
(
_L(
"Wiki"
)
)
;
newServiceEntry.iDescription
.Set
(
KNullDesC)
;
newServiceEntry.SetVisible
(
ETrue)
;
rootEntry-
>
CreateL(
newServiceEntry)
;
//在根目录下创建myFolder的 TMsvEntry的对象
newFldrID =
newServiceEntry.Id
(
)
;
//得到myFolder的TMsvId 的值
iNewFolderId=
newFldrID;
CleanupStack::
PopAndDestroy
(
)
;
CleanupStack::
PopAndDestroy
(
)
;
}
上述就是基本的操作,淡然你最好就是在创建 的时候先查询一下 ,判断你要创建的文件名是否与系统已有文件冲突