转自:http://blog.csdn.net/hitlion2008/article/details/7047629
Mms是一个应用程序的名字,这个应用程序是Android上面的信息应用程序,它即能处理短信SMS(Short Messaging Service),也能处理彩信(Multimedia MessagingService)。
Mms 代码的位置在sourcecode/packages/apps/Mms
Mms数据库相关代码位置在sourcecode/packages/providers/TelephonyProvider
相关概念
Thread对话---是指用户与某个联系人或某几个联系人之间的一系列信息交互。在Mms中,用Thread Id来标识和管理对话,Thread Id也即在数据库表threads中的_id。
可能用Conversation是更易于理解。但是Thread本身就有对话的意思,某些论坛中的一个帖子在英语里就叫Thread。Thread的词典释义是:”因特网上关于一个题目一连串的信息 (计算机用语)”,所以这里用Thread,也是比较恰当的。
Conversation--是用来管理Thread对话的,Conversation是一个Thread对话的抽象出来数据结构,它能够,从数据库中查询,删除一个对话中的消息等,每一个Conversation有一个唯一的Thread Id。但是它也负责一些所有对话的管理,比如查询所有的对话,删除所有的对话等(这个应该是设计上面的问题)。
事实上,Conversation更多时候是充当前前对话的角色,比如在新新建信息时,编辑信息时,或是查看某个对话时,都会有一个Conversation对象存在在,以代表当前信息所处的对话。它是一个近似单键,都是通过Conversation的静态方法来获得Conversation对象,有一些其他的方法也是静态的。
ConversationList--负责显示和编辑所有的对话,以列表形式显示所有的Thread,每一项代表一个Thread,通常也会显示这个Thread的状态,如有无草稿,信息发送/接收是否成功等。
Message--消息,泛指短信SMS和彩信MMS。因为不再区分短信和彩信,在对话列表,草稿管理和信息列表中它们都是一样的,都是信息。Message的数据结构是MessageItem,它是一个纯数据结构,里面存储着关于一个信息的所有数据,还有MessageListitem,它是一个View,专门用于在消息列表中显示一个信息,里面的数据都是从MessageItem获取。它们统一都被ComposeMessageActivity,MessageListAdapter和MessageListView来管理。
WorkingMessage--当前消息,它是专门用于代表当前正在创建和编辑的信息的数据结构无论是短信还是彩信,在创建和编辑的时候都放在一个WorkingMessage对象里面。这个对象也负责信息的发送,存储和存储为草稿。
Slideshow--在Mms应用里面,彩信是以Slideshow幻灯片的形式来展示的。一个彩信可以有多张幻灯片,每张幻灯片上面可以有图片,文字,音频和视频,可以设置每张幻灯片的浏览时长,布局等,这里的幻灯片与Office中的PowerPoint有几分类似。幻灯片的数目限制是以彩信允许的附件大小为上限,这个也与每张幻灯片上面的媒体大小有关。可以这样讲MMS就是以幻灯片形式存在的,创建的时候是一张幻灯片一张幻灯片的编辑,收到的彩信或编辑完后,就可以一张张的放映浏览幻灯片。
需要注意的是以幻灯片方式显示彩信仅是应用程序层的处理方式,不同的信息应用程序会以不同的方式处理彩信,实际的彩信的数据是以标准的Pdu方式进行发送和接收,是应用程序在发送前把幻灯片转化成为Pdu,并在接收后把Pdu转化成为自己可识别的幻灯片。
Recipient接受人,这里是指信息的接收者,要么是一个陌生的电话号码,要么是一个陌生的电子邮件地址(彩信时),要么就是手机联系人数据库中的联系人。彩信和短信对接收人的数量都有限制,这个也是在Mms的Settings时面可以更改的。每一条信息要想发送成功,必须保证接收人是一个合法的联系人,合法也是不同的手机有不同的定义,但通常来讲,要么与联系人数据库中的某个联系人匹配,要么是一个电话号码,要么是一个电子邮件地址,其他情况则视为不合法,对于有不合法接收人的信息,不会进行发送。管理联系人的数据结构是Contact和ContactList,其中ContactList是一个以Contact为元素的ArrayList。Contact不但存储有联系人的一些信息,如名字,电话号码等,它还能与联系人数据库进行同步,也就是它能保证它是一个合法的联络人,并在数据库中存在。在信息发送前会先进行一次联系人同步,以保证已有的联系人是正确的。