亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android Mms之:深入理解Compose

2020-04-11 12:22:29
字體:
來源:轉載
供稿:網友

Mms中的ComposeMessageActivity(以下簡稱Composer)是整個Mms中最重要的一個組件,它負責編輯信息,發送信息,管理信息,接收信息,與外部應用接口。在Mms內部與Composer關聯的類和組件特別多,幾乎所有的類和組件都與Composer有關聯,關于信息的所有操作流程都起始于Composer;在外部Composer也是公開的接口,能夠處理Intent.ACTION_SEND和Intent.ACTION_SENDTO以及文件類型為audio/*,image/*,video/*和text/*。
Composer是一個標準的Activity,它的啟動流程也要經過onCreate(), onStart(),onResume(),銷毀流程要經過onPause(),onStop()和onDestroy() 。除此之外,其他的操作都要經過用戶來觸發,或者由其他事件,比如新來信息,數據庫變化等。
初始化流程
Composer的初始化流程要做的事情有初始化UI,注冊一些Receiver和Listener,初始化Conversation和WorkingMessage,查詢信息等。其中,初始始化Conversation和WorkingMessage是最重要的,因為UI和一些操作要依賴于Conversation是否存在,以及消息數量和是否有草稿。所以這里我們主要討論初始化Conversation和WorkingMessage。
初始化的主要流程都是在initialize()函數中進行的,這里也主要解析下initialize()函數。initialize()最先要做的就是初始化WorkingMessage,創建一個新的WorkingMessage對象mWorkingMessage;然后就是根據Intent和Bundle來初始化Conversation,這一過程相當重要,因為Conversation對象含有這一會話的所有重要數據,包括是否有草稿,信息的數量,是新建的信息還是已有信息,這些信息都將影響后續的初始化工作。
initActivityState()主要看二個參數一個是所傳入的Bundle另一個就是Intent。它會優先查看Bundle,如果Bundle對象不為空的話,會從Bundle之中取出一些狀態,比如收信人recipients,比如退出狀態exit_on_sent等。根據所拿出來的的收信人就可以用Conversation的get()方法來獲取Conversation對象mConversation,之后便會讓mWorkingMessage從Bundle中讀取相關的數據。其實,這里從Bundle中初始化是與onSaveInstanceState()相對應的,在onSaveInstanceState()中會保存recipients和讓mWorkingMessage寫數據到Bundle中,以保存Activity的狀態??傮w來講,onSaveInstanceState是保存Activity的狀態,而initActivityState()中當Bundle不為空時是恢復Activity的狀態。
如果Bundle對象為空的話,那么就從Intent中來初始化相關的數據,這也是大多數的情況所走的邏輯。首先是檢查Intent中是否有thread_id和address,也直接從Intent的Uri中搜尋收信人的相關信息,以便用Conversation.get()來獲取Conversation對象mConversation。之后還會試圖從Intent中獲取其他信息比如消息的主體sms_body,主題subject等。
調用完initActivityState()以后,mWorkingMessage和mConversation二個對象應該都被正確的初始化了。這時候就要處理特殊的Intent:ACTION_SEND和Forward了。先是處理ACTION_SEND,這是對外的接口,當外部程序想通過MMS來發送文本(text/*),圖片(image/*),音頻(audio/*)和視頻(video/*)時就會通過Intent.ACTION_SEND來發送。對于這個Intent的處理很簡單就是把相關文件的Uri,通常放在intent.getExtras(Intent.EXTRA_STREAM)中,把Uri加載為附件,也可以通過Intent.SEND_MULTIPLE來處理多個附件,但是邏輯是一樣的。Forward是Intent當中有forward_message時,同時取出另外二個選項,一個是要轉發的信息的Uri,一個是主題subject和消息主體sms_body。因為對于SEND和Forward都僅指定信息的內容而沒有指定收信人,所以mConversation對象是沒有實際內容的,它們都會與新建信息是一樣的,只不過有信息的內容。
除了ACTION_SEND和Forward的信息有內容外,其他的信息都需要檢查是否有草稿,以便能加載草稿。加載草稿是由mWorkingMessage.loadDraft()來完成的,它會檢查mConversation的狀態,如果有草稿存在就從數據庫中加載出來。
到此,初始化的關鍵操作都已完成,數據的加載都已完成,剩下的工作就是根據這些數據來初始化UI,比如是否顯示收信編輯欄等。
銷毀流程
Composer的銷毀要做的只有二件事,一個是保存當前編輯的信息內容,也就是保存草稿,如果有的話;另一個就是通過onSaveInstanceState來保存狀態,不過這個通常用不到,只有當Composer被系統殺掉并希望重啟時才會調用到。
保存草稿的工作主要放在onStop()的時候,所以每當用戶離開Composer頁面都會走進onStop()也就都會檢查相關的條件以確定是否要保存草稿。保存草稿的條件有三個:信息有內容(mWorkingMessage.isWorthSaving(),有內容,有主題,有附件均可),并且信息有正確的收信人(在不在數據庫中均可),還有就是Composer在等待其他Activity(這個通常出現在添加聯系人或添加草稿過程中,因為要跳轉到其他Activity,所以Composer也會走到onStop(),但是這個時候因為信息還在編輯中,所以就需要保存草稿)。如果以上條件不滿足就丟棄信息內容(mWorkingMessage.discard()),否則就保存草稿(mWorkingMessage.saveDraft())。
對外公開的接口
跟Android中組件復用的公開接口一樣,Composer對外公開的接口也是通過處理Intent來完成的,主要是二個Intent一個是Intent.ACTION_SEND,另一個就是Intent.ACTION_SENDTO。接口的聲明處是在AndroidManifest文件中的IntentFilter。對于處理,有二個地方,一個是在initActivityState()中,會從Intent中嘗試取出address, sms_body 和subject;另外對于ACTION_SEND需要明顯的處理handleSendIntent(),因為需要從Intent中取出信息的內容通常都是多媒體文件,取出多媒體文件然后通過mWorkingMessage.setAttachment()添加為信息的附件。
還有一個接口就是對于分享聯系人,分享聯系人的方式是把聯系人的信息作為短信的內容發送出去。這個過程實際上是由Contacts中的ShareContactsViaSMS來先行處理,它會把聯系人的信息從數據庫中讀取出來,然后拼成一個字串再用Intent當成sms_body傳給Mms發送。
與其他組件的交互
Composer在編輯信息過程中,特別是編輯MMS的過程中需要不斷的與其他組件進行交互,比如添加圖片,添加音頻,添加視頻或拍攝圖片,拍攝視頻等。對于選擇圖片,選擇視頻來講是通過與Gallery應用進行交互,發送GET_CONTENT的Intent給Gallery,Gallery會列出圖片和視頻供用戶選擇,當用戶選擇后,Gallery會把用戶所選擇的圖片或視頻的Uri傳給Composer,之后Composer就用傳過來的Uir進行添加附件的動作。對于音頻是與Music應用進行交互,邏輯類似。對于拍攝圖片和拍攝視頻和錄制音頻流程稍有不同。拍攝圖片和拍攝視頻在請求Intent中要指定輸出的路徑通過Intent.EXTRA_OUTPUT來指定輸出Uri。Camera在拍攝的過程中會把數據寫在所指定的Uri中,之后Composer會直接從這個Uri中讀取文件(這里與2.3不同,2.3是Camera把文件的Uri放在Intent中)。TempFileProvider就專門用于管理拍攝圖片和拍攝視頻時臨時存儲數據的。傳給Camera的Uri是”content://mms_temp_file/scrapSpace”,這個Uri由TempFileProvider來管理,由Camera來使用,當Camera要寫數據時openFile()時,TempFileProvider就會創建一個臨時文件,在外部存儲卡上/sdcard/Android/data/com.android.mms/mms_temp_file/scrapSpace/.temp.jpg,Camera所拍攝的圖片和視頻都存放在這個文件之中。TempFileProvider中還有方法以操作這個文件,比如TempFileProvider.renaceScrapFile()就是把.temp.jpg文件重命名成為一個.3gp的視頻。除了Composer會用到這個TempFileProvider,在SlideEditorActivity中編輯一張幻燈片的時候也會用到這個臨時文件,因為編輯幻燈片的時候也是能夠通過Camera來添加圖片的視頻的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本免费一区二区三区视频观看| 国产91精品视频在线观看| 国产精品视频区1| 国产精品∨欧美精品v日韩精品| 91av在线不卡| 国产精品亚洲视频在线观看| 欧美午夜精品伦理| 亚洲国产精品字幕| 57pao国产成人免费| 亚洲国产日韩欧美综合久久| 一本一本久久a久久精品牛牛影视| 亚洲成年网站在线观看| 日韩综合视频在线观看| 久久久电影免费观看完整版| 欧美肥老太性生活视频| 久久久av亚洲男天堂| 久久久精品一区二区三区| 亚洲第一视频在线观看| 日韩免费中文字幕| 国产亚洲精品久久久久动| 欧美另类老女人| 久久激情五月丁香伊人| 大荫蒂欧美视频另类xxxx| 日韩免费精品视频| 亚洲人成人99网站| 中文字幕精品一区二区精品| 不卡伊人av在线播放| 亚洲欧美成人一区二区在线电影| 97超级碰碰人国产在线观看| 中文字幕视频在线免费欧美日韩综合在线看| 96精品视频在线| 亚洲三级av在线| 奇门遁甲1982国语版免费观看高清| 一本一本久久a久久精品牛牛影视| 亚洲激情电影中文字幕| 亚洲第一网站免费视频| 亲子乱一区二区三区电影| 一本久久综合亚洲鲁鲁| 日韩av电影在线播放| 亚洲色图色老头| 欧美大片免费观看在线观看网站推荐| 欧美日韩国产精品一区二区不卡中文| 一区二区三区视频在线| 国产精品日日摸夜夜添夜夜av| 欧美成人免费视频| 97视频在线观看视频免费视频| 国产成人精品视频在线| 欧美精品久久一区二区| 日韩一区二区久久久| 91沈先生作品| 亚洲欧美一区二区三区久久| 精品中文字幕在线观看| 欧美有码在线视频| 亚洲综合精品一区二区| 黑人极品videos精品欧美裸| 亚洲影影院av| 69精品小视频| 日本sm极度另类视频| 久久久免费av| 中文字幕亚洲激情| 国产精品∨欧美精品v日韩精品| 国产精品久久久久高潮| 91免费在线视频| 奇米4444一区二区三区| 91免费精品国偷自产在线| 国产精品视频中文字幕91| 深夜福利亚洲导航| 欧美成人一区在线| 久久久精品久久久久| 91九色国产社区在线观看| 欧美一级bbbbb性bbbb喷潮片| 懂色aⅴ精品一区二区三区蜜月| 欧美性少妇18aaaa视频| 国产欧美精品日韩| 91久久国产精品| 久久久久久久久久国产精品| 久久av在线看| 亚洲精品福利在线观看| 日韩国产精品视频| 国产精品爽黄69天堂a| 久久这里只有精品视频首页| 久久91超碰青草是什么| 久久大大胆人体| 欧美性猛交xxxx| 国产精品第一第二| 日韩福利视频在线观看| 美女999久久久精品视频| 欧美专区在线视频| 亚洲xxxxx| 国产视频精品一区二区三区| 亚洲欧洲一区二区三区在线观看| 亚洲无线码在线一区观看| 97国产suv精品一区二区62| 国产一区二区三区在线| 亚洲免费电影在线观看| 91久久精品国产| 国产精品高潮呻吟久久av黑人| 欧美视频一区二区三区…| 在线电影欧美日韩一区二区私密| 欧美在线一区二区三区四| 欧美电影免费播放| 韩国v欧美v日本v亚洲| 久久精品欧美视频| 久久久久久亚洲精品| 狠狠久久五月精品中文字幕| 色诱女教师一区二区三区| 91丨九色丨国产在线| 成人国产精品久久久久久亚洲| 日韩在线播放一区| 日韩av电影在线免费播放| 中文字幕日韩在线视频| 另类图片亚洲另类| 欧美成人高清视频| 欧美性xxxx极品高清hd直播| 亚洲人在线视频| 亚洲男人的天堂网站| 中文字幕一区二区精品| 国产精品久久久久久久久久久新郎| 国产精品欧美风情| 超薄丝袜一区二区| 91精品久久久久久久久| 日韩影视在线观看| 久久久久久91香蕉国产| 国产欧美精品一区二区三区介绍| 91精品综合久久久久久五月天| 欧美大人香蕉在线| 日韩视频―中文字幕| 欧美精品九九久久| 久久久午夜视频| 久久亚洲综合国产精品99麻豆精品福利| 精品成人乱色一区二区| 国产中文欧美精品| 韩国三级日本三级少妇99| www.亚洲男人天堂| 久久中文字幕在线视频| 欧美激情一区二区三区久久久| 91香蕉亚洲精品| 久久久亚洲网站| 国产精品久久久久久久久久久久| 亚洲精品第一国产综合精品| 自拍偷拍亚洲区| 国产一区二区欧美日韩| 日韩电影在线观看永久视频免费网站| 中文字幕日韩高清| 中文字幕在线观看亚洲| 亚洲欧洲av一区二区| 精品人伦一区二区三区蜜桃网站| 国产精品r级在线| 欧美电影免费观看| 亚洲欧美激情另类校园| 中国人与牲禽动交精品| 韩国精品美女www爽爽爽视频| 精品毛片三在线观看| 亚洲人精选亚洲人成在线| 成人乱色短篇合集| 亚洲免费电影在线观看| 精品视频在线观看日韩| 国内精品在线一区| 国产欧美中文字幕| 热草久综合在线| 精品久久久久久久久中文字幕| 午夜精品久久久久久久99热浪潮| 久久九九全国免费精品观看| 欧美超级乱淫片喷水|