开发学院手机开发Android 开发 Android MMS/SMS 入口 阅读

Android MMS/SMS 入口

 2010-11-05 00:55:27 来源:WEB开发网   
核心提示:handleSendIntent() 函数判断是否由一个intent调用起来的CMA,特征是intent可以得到Action和mimeType; 比如ACTION_SEND和ACTION_SEND_MULTIPLE; 文件流比如EXTRA_STREAM,Android MMS/SMS 入口(4),字符串EXTRA_TE

handleSendIntent() 函数

判断是否由一个intent调用起来的CMA,

特征是intent可以得到Action和mimeType; 比如ACTION_SEND和ACTION_SEND_MULTIPLE; 文件流比如EXTRA_STREAM,字符串EXTRA_TEXT;

遇到这些情况,直接添加附件,其他流程类似于messagelist继续。

handleForwardedMessage() 函数

在不是intent调用的CMA时,检查是不是由转发发起的调用

这些检查归根到底是检查intent的extra中带的关键字,比如 “forwarded_message” , intent.getAction() ,“recipients” , “thread_id”

(III)

CMA的入口只有两个:

onCreate()和 onNewIntent()

这俩个初始化函数的核心是: initialize(Bundle savedInstanceState)

onCreate比较简单,他的内容主要是:

初始化变量 ; 初始化UI ; initialize()

onNewIntent, 只发生在,singleTop的场景,也就是说,已经有一个CMA在Task的顶部(也就是用户的视线内,或者被隐藏到后台了),

之后在从launcher的短信或者从statusbar的短信入口进入时,就会调用到onNewIntent。

在onNewIntent调用时,需要保存原有的CMA的状态,并用新的Intent里的信息,形成新的CMA,从而替代他。

原有的Intent的信息在mConversation和mWorkingMessage里面,

比如mConversation.getThreadId() 得到threadId,如果threadId是0,则说明原来的CMA包含一个草稿,需要保存

比如mWorkingMessage里面,包含最新的收件人信息,需要用mWorkingMessage.syncWorkingRecipients()复制到conversation中,这时候把这份联系人复制到Conversation里,以备保存草稿用

关于新起来的这个Intent和原来的CMA是不是属于同一个conversation的判断;

判断的唯一依据是联系人列表

新来的intent的uri调用uri.getSchemeSpecificPart()函数返回的是一个由“;“分割的电话号码序列,可以拼装成ContactList,是新来的联系人列表。

通过对比,可以知道原来的和信来的两者之间的ContactList是否相同;

如果对比是不同的,那么新的intent将占据CMA,如果对比相同,则没有更换Conversation以及占据这个操作。

‘这个占据包括三步:

1,saveDraft() 函数 ,保存原有conversation的草稿

上一页  1 2 3 4 5  下一页

Tags:Android MMS SMS

编辑录入:coldstar [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接