本文转自http://blog.csdn.net/hitlion2008/article/category/945580,感谢作者文章对于我的指导,作者这个系列的文章对做Mms开发有极大的帮助,希望也能给更多的人启发
这里的Mms名称并不准确,因为它是一个应用程序的名字,这个应用程序是Android上面的信息应用程序,它即能处理短信SMS(Short Messaging Service),也能处理彩信(Multimedia MessagingService)。它是除电话程序外,另一个非常重要的手机系统核心应用程序,因为对于手机来讲,最重要的二个功能就是电话功能和信息功能。在功能手机时代,是这样,到了智能手机时代,仍然是这样,如果一个手机不能打电话或者不能收发信息,那么这个东西就不能叫做手机(砖头?)。
为了不引起混淆,下面将Mms作为信息应用程序的简称,SMS则是短消息,MMS代表多媒体彩信,如不特殊说明信息将包括SMS和MMS。
与功能手机时代的信息应用一样,Android的Mms也具有通用的信息程序所具有的功能,比如创建信息,收发信息,转发信息,以及对于信息的管理,还有就是对于信息的一些配置。
与功能手机不同的是,信息不再是以传统的方件夹方式来组织和管理(收信箱,发信箱,草稿箱,已发信息,短信,彩信等),信息以某种方式排序(时间,主题),把所有的信息罗列在相应的文件夹中(收到的信息在收信箱中,发出去的信息在已发信息中,草稿在草稿箱中,正在发送的信息在发信箱中),信息的组织方式有所改变。智能手机引入了对话(Thread)的概念,也即把二个联系人之间的信息交互看成一个系列对话,二人之间的所有信息都列在对话之中。每个对话中,又以时间为序来管理具体的信息,以不同的着色来区分发出去的信息和收到的信息,在信息的旁边还可以显示联系人的信息,如头像,点击头像还可以有其他的快捷操作(比如拨号)。Mms管理一系列对话,从而没有了传统的各种文件夹。所以,对于Mms来讲核心概念是对话,而非信息或文件夹。
同样,智能手机也不再区分短信和彩信,而是把它们统一看作一个对话中的信息,当然,彩信和短信还是有区别的,主要在发送和显示这块,在信息管理理上不再区分彩信和短信(传统手机都会专门的短信文件夹,彩信文件夹),也就是不会有彩信文件夹,短信文件夹,而是统一的以对话形式来管理它们,而在对话中,它们都是信息,只是里面内容不同而已。
Mms中不再有收信箱,发信箱和草稿箱,而是以统一的对话列表来代替。一个对话中既包括收到的信息也包括发出去的信息,另外以状态信息方式来标识每个对话的状态,比如有无草稿,是否发送成功等。
如前面所说,对话是新一代信息程序的核心概念。对话是发生在二个联系人之间,或是一个联系与多个联系人之间的信息交互,就好像IM(MSN, QQ)的聊天窗口一样,二人的信息都显示在窗口之中,但这些信息只发生在二人之间。以对话的方式来组织信息更加符合人们的使用习惯,也更加方便的查询交往记录。
因为对话是发生在二个联系人之间的,所以对话与联系人的关系是十分密切的。因为,一对话中的信息都属于这二个联系人之间的。所以,通常来讲对话与联系人是一一对应的关系,除非发给多个联系人的信息。或者,对话是依赖于联系人的,所以对话是不能够被显示的创建的,只能显示的创建信息。当创建一个信息时,如果联系人还没有相应的对话,那么会自动创建一个对话;如果已经有了的话,就进入相应的对话。
在对话列表可以管理对话,进行操作,比如进入对话,删除对话,查看联系人等。进入对话后,可以对信息进行操作,比如编辑,删除,转发等。
一些关键的概念
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不但存储有联系人的一些信息,如名字,电话号码等,它还能与联系人数据库进行同步,也就是它能保证它是一个合法的联络人,并在数据库中存在。在信息发送前会先进行一次联系人同步,以保证已有的联系人是正确的。
因为Mms是手机核心程序,它与电话程序一样要通过手机的Modem来实现无线通讯,也就是说它是依赖于SIM的。所以,如果手机中没有SIM那么是无法正常使用Mms的,不能接收和发送信息。