android fih-mms的实现

1、接收到mms的保存
      接收到得mms,会在RetrieveTransaction::run()函数中调用PduPersister::persist(..)进行保存。

2、vcard、vcalendar的实现
      a、接收
           接收到的mms被保存时,会在PduPersister::persist(..)的最后调用checkHaveOtherAttachment(..),设置db中的Mms.OTHER_ATTACHMENT,用来标示附件的类型,如果是vcard或vcalendar,则其值为Mms.OTHER_ATTACHMENT_VCARD_UNSELECT等;
           db中的Mms.OTHER_ATTACHMENT会用来标示mms中是否含有这两个东东,从而决定UI的显示;
           访问part of vcard、vcalendar时,通过遍历mms uri在db中的所有part,比较器content type是否为"text/x-vCard"、"text/x-vCalendar"或"application/oct-stream",从而找出要的part,如转发时就是通过此方式(ComposeMessageActivity::importVcardVCalendar());
      b、编辑

            编辑时,vcard选取后,其数据会被作为一个part存储在db中,并插入到"第一个slide"中,具体可参考ComposeMessageActivity::addVCard();
            生成pdu时,vcard、vcalendar会跟其他的model一样,被作为part存储,具体见SlideshowModel::makePduBody(..);

3、loading the list of thread and message
      a、thread
            ConversationList::startAsyncQuery(),从DB中读出列表;
            ThreadListQueryHandler::onQueryComplete(..),拿到查询结果cursor;
            ConversationListAdapter::bindView(..),解析cursor,并将数据赋给各个thread item;
      b、message
            ConversationList::onListItemClick(..),触发event of loading message list。
            ComposeMessageActivity::startMsgListQuery(),从DB中读出列表;
            MessageListAdapter::bindView(..);             MessageItem::MessageItem(..),解析cursor,并将数据赋给各个message item; 4、RecipientsEditor的实现。
      a、收件人栏输入两个及以上字符后自动列出匹配的原理
            字符改变 --> 触发text changed事件  -->  ...  -->  RecipientsAdapter::runQueryOnBackgroundThread(..)  -->  ...  -->  AutoCompleteTextView::onFilterComplete(..)  -->  AutoCompleteTextView::showDropDown()  -->  RecipientsAdapter::bindView(..)
            其中,函数runQueryOnBackgroundThread是从数据库中查询符合条件的收件人号码或email地址;bindView则是将查询到的各项作为item insert到ListView中。
      b、。。。。
5、发送mms的过程。
      以ComposeMessageActivity中的发送为例。
      保存后为草稿  -->  调用ComposeMessageActivity::sendMmsWorker(...)  -->  MmsMessageSender::sendMessage(...)  -->  设置时间等,将mms move到 out box -->  requestService  TransactionService::SEND_TRANSACTION  -->  TransactionService::ServiceHandler::handleMessage(...)  -->  ...  -->  SendTransaction::run()  -->  Transaction::sendPdu(...)  -->  HttpUtils.httpConnection(...)  -->  AndroidHttpClient::execute(...)。
      AndroidHttpClient::execute 会执行真正的发送操作。
6、。。。

你可能感兴趣的:(thread,android,ListView,list,存储,insert)