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

首頁 > 系統 > Android > 正文

Android Mms之:深入MMS支持

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

Composing and editing
MMS在Android Mms應用里面的具體實現形式,或數據結構是SlideshowModel,它是一個每個節點為SlideModel的ArrayList,SlideModel是一個Model的List,也就是它可以接收任何Model的子類,Audio,Video,Image和Text都可以放到SlideModel上面。SlideModel主要用于管理其上面的各個媒體,比如它們的布局,它們的播放控制,而SlideshowModel主要用于管理所有的附件,比如把所有的附件轉化成為Android的MMS協議的數據類型Pdu,以及從Pdu轉化成為SlideshowModel。
Pdu是實現了MMS協議的標準格式,它可以直接的發送給MMSC,從MMSC取回來的也是一個Pdu格式的數據。應用層Mms不需要關心Pdu的具體實現方式,Android中有一個內部的包com.google.android.mms.*下面的類都是專門用于處理Android平臺上的MMS。里面提供了工作可以把應用層的數據,比如媒體文件等,進行包裝成Pdu,再把Pdu分解成為媒體文件。Pdu的數據結構包括PduBody,這個是用于存放多媒體文件的地方,其里面是PduPart的集合,每個PduPart代表一個文件。PduPersister用于操作這些數據結構,包括寫入數據庫,從數據庫中讀取等。

SlideshowModel或俗稱幻燈片是應用層的MMS的實現形式,或者它是應用層MMS用來創建,編輯,顯示和管理多媒體的一個數據結構。創建和發送MMS的時候,就是創建一個SlideshowModel,構建MediaModel,TextModel等加入到SlideshowModel中。在發送時,SlideshowModel會把其內的媒體文件取出來,轉化為PduPart放入PduBody中。收到信息后從PduBody中取出PduPart,還原成媒體文件,生成MediaModel,加入到SlideshowModel中,也就是還原為幻燈片。應用拿到幻燈片后可以做顯示和播放。

附件類型
關于附件類型,Mms應用中所有的MMS都有一個幻燈片,其內含有所有的附件文件。但是Mms做了一些特殊的處理,對于一個MMS信息,它的附件類型分為IMAGE, AUDIO, VIDEO,和SLIDESHOW,這些從添加附件對話框的列表中可以看出,而且展現方式也有所不同。但是實際的實現上面并沒有這么多的類型,只有一個SlideshowModel,所有的附件都在里面。它處理的規則是這樣的,如果只添加了一個媒體(image, audio和video)時,會把類型設置為相應的媒體類型,而只有在附件對話框中明確選擇添加幻燈片時并且添加了多張幻燈片后,附件類型才會是幻燈片。這個附件類型只在給MMS添加附件時和發送MMS前有效,主要用于在消息列表中如何展示媒體文件,如果是具體媒體類型,就直接顯示,否則顯示為幻燈片,這個附件類型僅存在于應用中顯示媒體所用,并不會在發送出去的Pdu中有痕跡。當收到MMS后,也是根據轉化后的SlideshowModel里面的內容來推測出附件類型,然后再做顯示。所以,對于一個MMS來說它始終都有一個SlideshowModel,用戶所感受到的附件類型僅是附件媒體顯示上面的一個處理而已。

創建和編輯MMS
與傳統手機不同,創建MMS并不需要特殊的方式。因為Mms應用對MMS和SMS并不做嚴格的區分,而是以統一的對話中的一個消息來對待,所以MMS與SMS的區別也很簡單,就看一個消息中只否有附件(WorkingMessage.hasAttachment())。創建MMS也十分簡單,只需點擊Composer而的Attach菜單添加媒體即可。在列表中選擇image, audio和video后就只有一個媒體文件,都會跑到其他的Activity去選擇文件,然后會返回其Uri給Composer,Composer會調用WorkingMessage.setAttachment()來做具體的添加,用Uri創建MediaModel然后加入到SlideshowModel中,并設置類型。另外,如果選擇了Attach幻燈片,就會直接進入編輯幻燈片的而面,可以添加刪除幻燈片頁,給幻燈片頁加媒體文件,設置布局等,之后Composer會把SlideshowModel顯示出來,此時的附件類型也是SLIDESHOW,這些都是通過WorkingMessage.load()來完成的。
WorkingMessage在把媒體加到幻燈片里以后,就會回調一個接口 onAttachmentChanged(),Composer實現了此接口,這個接口主要用于通知Composer附件已發生變化,刷新UI以正確顯示附件。Composer會創建AttachmentEditor來顯示附件的內容,因為所有的附件都放在Slideshow里面這個Slideshow在WorkingMessage中,可以通過WorkingMessage.getSlideshow()來獲取。AttachmentEditor會根據Slideshow里面的內容來創建不同的View以展示不同的附件,如果Slideshow中只有一個Video,Audio或Image,就直接創建VideoAttachmentView,AudioAttachmentView或ImageAttachmentView,而對于幻燈片中頁數大于1時就會創建SlideshowAttachmentView。還有相應的按扭可以用來編輯,替換或刪除,對于單個媒體有查看/播放,選擇后可以查看原圖和播放音頻視頻,替換可以重新重選擇一個附件,刪除會移除掉附件;對于Slideshow有編輯和刪除,編輯會直接進入幻燈片的編輯頁面,那里可以一頁一頁的對每頁幻燈片進行詳細的編輯,刪除會移除掉附件。

編輯完附件后有三種處理方式,一個是發送信息,一個是保存為草稿另一個就是放棄信息。發送信息和保存草稿都會對幻燈片進行打包,轉成Pdu,并保存到數據庫,之后的幻燈片都需要從數據庫加載并把Pdu解包成為SlidehshowModel。

Packaging and unpackaging MMS
要發送信息前,或是保存草稿時,都需要把SlideshowModel進行打包生成Pdu格式,并保存至數據庫。這個稱為MMS的打包(Packaging),是由SlideshowModel.makePduBody()方法來完成,它會把幻燈片里面的內容一個一個的取出來,轉成一個PduPart,再 放入PduBody中,以生成PduBody,一個媒體對應一個PduPart,同時還可以設置PduPart的屬性以描述媒體的文件,比如ContentType,這是一個用于標識媒體MIME類型的字串;Filename文件的名字; ContentLocation文件的路徑。這些信息都用于描述PduPart中數據的元信息(MetaData),也就是數據具體是什么,以便讓解包的時候對數據進行正確的處理。
之后PduPersister會通過其persist()方法把PduBody存入到數據庫中,它會把PduPart中的描述性信息作數據庫字段寫入,把文件存儲在TelephonyProvider文件夾下面(/data/data/android.providers.telephony/app_parts),并把存儲后的路徑作為_data字段寫入數據庫,這樣一條MMS的數據就都寫入了數據庫中。這以后,MMS的數據都是從數據庫中加載,所以原SlideshowModel中的數據庫不再有效,如Uri在原SlideshowModel中可能指向一個文件,或是其他數據庫,在PduPersister.persist()之后就不再有效了。
當PduPersister.persist()之后,MMS的附件就都從數據中加載,PduPersister.load()會從數據庫把數據加載成為一個PduBody,SlideshowModel的方法createFromPduBody()就是用于把PduBody轉化成為一個SlideshowModel,從PduPart取出媒體信息以得到正確的媒體格式,和相關信息,可以通過Uri來獲取具體文件(流)。
接收到的MMS過程也差不多當NotificationTransaction或RetrieveTransaction用HttpUtils從MMSC獲取到MMS數據后會用PduParser來解析數據生成Pdu,再用PduPersister.persist()把其寫入數據庫,之后會再從數據庫中加載。

SMIL語言支持
對于每條MMS還有一個很重要的數據就是SMIL語言,SMIL是同步多媒體集成語言的簡稱(Synchronized Multimedia Integration Language),它與HTML文檔很類似,是W3C(World Wide Web Consortium)組織規定的多媒體操縱標準語言。MMS也是用它來管理和播放多媒體。來看一個具體的SMIL語言實例:

復制代碼 代碼如下:

<smil xmlns="http://www.w3.org/2000/SMIL20/CR/Language">
        <head>
                <layout>
                        <root-layout width="360" height="615"/>
                        <region id="Image" width="347" height="260" top="14" left="7" fit="meet"/>                              
                        <region id="Text" width="326" height="320" top="281" left="7" fit="scroll"/>
                </layout>
        </head>
        <body>
                <par dur="60s">
                        <img src="0.jpg" region="Image"/>
                        <text src ="0.txt" region="Text"/>
                </par>
                <par dur="60s">
                        <text src ="1.txt" region="Text"/>
                </par>
                <par dur="60s">
                        <text src ="2.txt" region="Text"/>
                </par>
                <par dur="60s">
                        <text src ="3.txt" region="Text"/>
                </par>
                <par dur="60s">
                        <text src ="4.txt" region="Text"/>
                </par>
        </body>
</smil>

SMIL語言播放多媒體時通常是一頁頁的,與幻為播放十分類似,因為很多SMIL播放器都會做成幻燈片形式。因為MMS用SMIL來傳送多媒體,所以Mms終端應用都會以幻燈片的方式來播放MMS。這也就是為什么Mms應用中會出來SlideshowModel的原因?;脽羝绞斤@示彩信是一種常用的方法,即使某些終端應用沒有用幻燈片放映的方式顯示彩信,但是對于運營商或彩信平臺發出來彩信都有頁碼標識,另外其他的一些手機,比如非智能手機查看彩信的方式也是以幻燈片一頁一頁的放映。

它主要記載著用于幻燈片的布局信息。這個SMIL語言就是用于幻燈片布局的,也就是說SMIL會像HTML文檔布局網頁那樣來說明如何布局幻燈片,它有這些TAG:head, layout, body, par,head是頭信息,里面有TAG layout用來說明這個幻燈片是如何布局的,具體的它用一些子TAG如root-layout, region等來說明幻燈片中的每一個元素如Image或Text如何布局。TAG body中列出了幻燈片的所有媒體元素和詳細內容,比如image, audio, text等,每一par是一頁,它的子TAG說明這一頁有哪些內容,當然SMIL語言還有很多內容可以參考Wikipedia上的講解。

當打包幻燈片時,也就是把SlideshowModel轉化為Pdu時,會根據SlideshowModel的內容生成一個SMIL語言,通過SmilHelper.getDocument()來生成SMIL文檔,把其加入到PduBody中并作為第一個PduPart,它的ContentType(MIME)是application/smil,它的內容就是SMIL文檔。需要注意的是SMIL文檔總是會在PduBody的第一個Part,并且它直接把文檔內容寫到PduPart中,而不是以文件的形式存在。
當解包的時候,會先取出SMIL文檔,對其進行解析,生成幻燈片。

因為SMIL是一個標準的文檔,所以W3C有其相應的規范,也有相應的庫來解析和生成。在Mms應用中可以看到這樣的二個Package: org.w3c.dom.*和com.android.mms.dom.*;其中org.w3c.dom是SMIL語言的一些標準庫,而com.android.mms.dom.*;是對org.w3c.dom一些標準接口的實現,或者說是為了Mms應用而做的一些適配。那么在com.android.mms.model.*里面的一些類也是根據SMIL標準而寫的,比如SmilHelper就是專門用于解析SMIL文檔和生成SMIL文檔,當然它會用到前面提到的二個Package里面的東西。還有如ImageModel,TextModel和RegionModel也都是基于SMIL標準的,比如它們分別 對應SMIL文檔中的標簽img, text和region。
當然,這都是具體的終端應用的實現,可能不同的應用會有不同的方式,但發送出去的和接收到的都應該是標準的Pdu,而SMIL文檔僅是一個其中一個PduPart而已。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人午夜一级二级三级| 一区三区二区视频| 亚洲欧美制服另类日韩| 日韩精品在线看| 国内伊人久久久久久网站视频| 精品视频中文字幕| 97国产精品人人爽人人做| 国产欧美精品日韩| 亚洲二区在线播放视频| 在线电影av不卡网址| 成人一区二区电影| 中文字幕精品网| 亚洲欧美福利视频| 欧美大胆在线视频| 亚洲欧美日韩成人| 亚洲黄色在线看| 国外日韩电影在线观看| 欧美老少做受xxxx高潮| 日韩欧美视频一区二区三区| 97超级碰碰碰| 亚洲精品久久7777777| 91亚洲精品久久久| 日韩少妇与小伙激情| 黑人巨大精品欧美一区免费视频| 久久成人av网站| 欧美精品18videos性欧| 揄拍成人国产精品视频| 国产精品久久久久7777婷婷| 亚洲伊人第一页| 亚洲一区免费网站| 国内伊人久久久久久网站视频| 国产精品免费久久久久影院| 亚洲成人精品在线| 成人看片人aa| 亚洲www永久成人夜色| 91精品国产电影| 日韩中文字幕免费视频| 国产精品18久久久久久麻辣| 日韩有码片在线观看| 91亚洲精品在线观看| 日韩美女在线看| 一区二区三区 在线观看视| 欧美极品少妇与黑人| 国产亚洲精品久久久优势| 国产成人小视频在线观看| 55夜色66夜色国产精品视频| 亚洲精品一区中文字幕乱码| 伊人久久久久久久久久久久久| 欧洲精品久久久| 久久久久久亚洲精品| 久久久久久久久久亚洲| 国产亚洲精品91在线| 亚洲成人精品视频| 国产亚洲精品久久久| 久久这里有精品视频| 亚洲变态欧美另类捆绑| 日韩精品亚洲元码| 欧美成人亚洲成人日韩成人| 精品久久久久久亚洲精品| 日本高清久久天堂| 色综合久久中文字幕综合网小说| 成人网址在线观看| 久久99久国产精品黄毛片入口| 欧美成人四级hd版| 成人福利在线视频| 国产不卡av在线免费观看| 欧美大成色www永久网站婷| 91免费欧美精品| 国产精品高精视频免费| 成人福利网站在线观看| 亚洲男人第一网站| 久久99热这里只有精品国产| 欧美人与性动交a欧美精品| 欧美日韩精品在线| 国产日本欧美一区二区三区| 成人中文字幕+乱码+中文字幕| 成人免费福利在线| 97超级碰碰碰| 久久久成人精品| 亚洲视频精品在线| 亚洲自拍中文字幕| 国产亚洲精品美女久久久久| 97视频在线免费观看| 中文日韩电影网站| 亚洲综合色激情五月| 欧美精品在线看| 欧美日韩电影在线观看| 国产精品一区二区久久国产| 久久精品亚洲精品| 91精品国产91久久久久久久久| 国产精自产拍久久久久久| 综合136福利视频在线| 亚洲精品美女在线| 欧美电影在线观看高清| 欧洲日韩成人av| 国产欧美中文字幕| 亚洲美女在线观看| 91精品久久久久久久久久入口| 性亚洲最疯狂xxxx高清| 欧美午夜宅男影院在线观看| 日韩欧美成人区| 国产精品夜间视频香蕉| 欧美日韩一区二区三区在线免费观看| 91综合免费在线| 九色91av视频| 国产精品久久久999| 91av视频在线免费观看| 欧美特黄级在线| 亚洲成人性视频| 亚洲欧美日本精品| 欧美肥婆姓交大片| 中文字幕日韩av综合精品| 久久成年人免费电影| 成人免费大片黄在线播放| 国产亚洲精品一区二区| 97在线视频一区| 亚洲成年网站在线观看| 尤物精品国产第一福利三区| 久久亚洲影音av资源网| 国产精品久久99久久| 欧美黄色三级网站| 欧亚精品中文字幕| 91成人性视频| 亚洲精品美女久久| 国产精品丝袜久久久久久高清| 亚洲国产精品字幕| 欧美性黄网官网| 伊人亚洲福利一区二区三区| 91九色综合久久| 成人免费黄色网| 精品美女永久免费视频| 国产精品盗摄久久久| 中文字幕日韩欧美在线视频| 91高清免费在线观看| 日韩视频亚洲视频| 欧美精品一区二区免费| 亚洲999一在线观看www| 日韩国产激情在线| 国产成人亚洲精品| 2019中文字幕全在线观看| 欧美理论电影在线观看| 欧美日韩激情网| 亚洲日本欧美日韩高观看| 国产精品video| 永久免费看mv网站入口亚洲| 在线播放精品一区二区三区| 欧美激情一区二区三级高清视频| 国产精品视频区| 69久久夜色精品国产7777| 欧美精品在线视频观看| 午夜欧美不卡精品aaaaa| 国产精品久久久久久久久久久久久| 欧美国产日韩在线| 亚洲美女av网站| 亚洲欧美另类人妖| 亚洲欧美一区二区激情| 成人免费网站在线| 91伊人影院在线播放| 一区二区三区www| 久青草国产97香蕉在线视频| 97色伦亚洲国产| 欧美日韩加勒比精品一区| 欧美成人免费观看| 欧美日本在线视频中文字字幕|