Android Mms之:PDU的使用詳解
更新時(shí)間:2013年05月22日 10:21:00 作者:
本篇文章是對PDU的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
Android當(dāng)中的Mms對MMS(Multimedia Messaging Service)的操作關(guān)乎MMS協(xié)議部分都是通過Frameworks中提供的API來完成的:com.google.android.mms這個(gè)包在SDK中是不開放的,只能供內(nèi)部程序使用,它封裝了所有MMS所需要的API。
這個(gè)包就是Android中對MMS協(xié)議的實(shí)現(xiàn),包括一些數(shù)據(jù)結(jié)構(gòu):GenericPdu,MultimediaMessagePdu,SendReq,SendConf,NotificationInd,RetrieveConf,PduHeaders,PduBody,PduPart等。也包括操作這些數(shù)據(jù)的類:PduPersister,PduParser和PduComposer。PduPersister主要供給Android內(nèi)部的應(yīng)用程序使用;而PduParser和PduComposer會(huì)涉及到PDU相關(guān)的協(xié)議,會(huì)與MMSC或其他平臺有相互影響(比如所打包的字節(jié)流是否符合標(biāo)準(zhǔn),能否被其他平臺成功解析和識別等)
這個(gè)包的功能就是在發(fā)送時(shí)把多媒體數(shù)據(jù)打包成標(biāo)準(zhǔn)MMSC能識別的PDU格式數(shù)據(jù),在接收時(shí)把PDU數(shù)據(jù)包解析出來以供更加方便的應(yīng)用程序使用,同時(shí)也提供一些存儲上的接口,比如把PDU保存到數(shù)據(jù)庫,從數(shù)據(jù)庫加載出PDU。
PduPersister: 用于管理PDU存儲,關(guān)鍵的方法:
為什么會(huì)要把PDU的存儲也封裝成PduPersister呢?因?yàn)镻DU的存儲方式 是放在標(biāo)準(zhǔn)的SQLiteDatabase中,通過TelephonyProvider,而SQLiteDatabase中存儲不能以直接的PDU的字節(jié)流來存儲,必須要把PDU拆解成為可讀的字段,因此在存儲PDU和從存儲加載PDU的過程 中涉及到PDU數(shù)據(jù)上面的處理,因此封裝出來,更方便使用。
PduParser:用于把PDU字節(jié)流解析成為Android可識別的GenericPdu
PduComposer:把GenericPdu打包生成PDU字節(jié)流
這個(gè)包就是Android中對MMS協(xié)議的實(shí)現(xiàn),包括一些數(shù)據(jù)結(jié)構(gòu):GenericPdu,MultimediaMessagePdu,SendReq,SendConf,NotificationInd,RetrieveConf,PduHeaders,PduBody,PduPart等。也包括操作這些數(shù)據(jù)的類:PduPersister,PduParser和PduComposer。PduPersister主要供給Android內(nèi)部的應(yīng)用程序使用;而PduParser和PduComposer會(huì)涉及到PDU相關(guān)的協(xié)議,會(huì)與MMSC或其他平臺有相互影響(比如所打包的字節(jié)流是否符合標(biāo)準(zhǔn),能否被其他平臺成功解析和識別等)
這個(gè)包的功能就是在發(fā)送時(shí)把多媒體數(shù)據(jù)打包成標(biāo)準(zhǔn)MMSC能識別的PDU格式數(shù)據(jù),在接收時(shí)把PDU數(shù)據(jù)包解析出來以供更加方便的應(yīng)用程序使用,同時(shí)也提供一些存儲上的接口,比如把PDU保存到數(shù)據(jù)庫,從數(shù)據(jù)庫加載出PDU。
| Class | Purpose |
|---|---|
| PduPersister | 用于管理PDU存儲 |
| PduParser | 用于解析PDU |
| PduComposer | 用于生成PDU |
PduPersister: 用于管理PDU存儲,關(guān)鍵的方法:
| Return |
Method |
Description |
|---|---|---|
| PduPersister |
getPduPersister(Context) |
Get the object |
| Uri |
persist(GenericPdu, Uri) |
把一個(gè)GenericPdu保存到Uri所指定的數(shù)據(jù)庫中,返回指向新生成數(shù)據(jù)的Uri |
| GenericPdu |
load(Uri) |
從數(shù)據(jù)庫把Uri所指的數(shù)據(jù)加載出來成一個(gè)GenericPdu對象 |
| Uri |
move(Uri, Uri) |
把Pdu從一個(gè)地方移到另一個(gè)地方,比如從草稿箱移動(dòng)到發(fā)件箱,當(dāng)MMS已發(fā)送時(shí)。 |
為什么會(huì)要把PDU的存儲也封裝成PduPersister呢?因?yàn)镻DU的存儲方式 是放在標(biāo)準(zhǔn)的SQLiteDatabase中,通過TelephonyProvider,而SQLiteDatabase中存儲不能以直接的PDU的字節(jié)流來存儲,必須要把PDU拆解成為可讀的字段,因此在存儲PDU和從存儲加載PDU的過程 中涉及到PDU數(shù)據(jù)上面的處理,因此封裝出來,更方便使用。
PduParser:用于把PDU字節(jié)流解析成為Android可識別的GenericPdu
| Return | Method | Description |
|---|---|---|
| PduParser | PduParser(byte[]) | Construct an object |
| GenericPdu | parse() | Parse the PDU byte stream into Android PDU GenericPdu |
PduComposer:把GenericPdu打包生成PDU字節(jié)流
| Return | Method | Description |
|---|---|---|
| PduComposer | PduComposer(Context, GenericPdu) | Construct an object |
| byte[] | make() | Transfer the GenericPdu into a PDU byte stream |
您可能感興趣的文章:
- Android編程之非調(diào)用系統(tǒng)界面實(shí)現(xiàn)發(fā)送彩信的方法(MMS)
- Android開發(fā)中使用mms模塊收發(fā)單卡和雙卡短信的教程
- Android Mms之:短信發(fā)送流程(圖文詳解)
- Android Mms之:接收信息流程(圖文詳解)
- Android Mms之:草稿管理的應(yīng)用
- Android Mms之:深入MMS支持
- Android Mms之:聯(lián)系人管理的應(yīng)用分析
- Android Mms之:深入理解對話列表管理
- Android Mms之:對話與聯(lián)系人關(guān)聯(lián)的總結(jié)詳解
- Android Mms之:深入理解Compose
- 簡單掌握Android開發(fā)中彩信的發(fā)送接收及其附件的處理
相關(guān)文章
Android實(shí)現(xiàn)登陸頁logo隨鍵盤收放動(dòng)態(tài)伸縮(完美解決鍵盤彈出遮擋控件的問題)
這篇文章主要介紹了Android實(shí)現(xiàn)登陸頁logo隨鍵盤收放動(dòng)態(tài)伸縮(完美解決鍵盤彈出遮擋控件的問題)的相關(guān)資料,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
Android自定義view實(shí)現(xiàn)側(cè)滑欄詳解
之前一直沒有寫側(cè)滑菜單的實(shí)現(xiàn)方法,今天計(jì)劃補(bǔ)上。手機(jī)開發(fā)中,往往存在很多功能沒處放的問題。我們可能會(huì)把功能放入一個(gè)菜單列表,但現(xiàn)在一種流行的做法是側(cè)滑菜單2022-11-11
Flutter 完美的驗(yàn)證碼輸入框?qū)崿F(xiàn)
這篇文章主要介紹了Flutter 完美的驗(yàn)證碼輸入框?qū)崿F(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Android12四大組件之Activity生命周期變化詳解
雖然說我們天天都在使用Activity,但是你真的對Activity的生命機(jī)制完全了解了嗎?Activity的生命周期方法只有七個(gè),但是其實(shí)那只是默認(rèn)的情況。也就是說在其他情況下,Activity的生命周期可能不會(huì)是按照我們以前所知道的流程,本章著重講解Activity的生命周期變化2022-07-07
Android Jetpack架構(gòu)組件 ViewModel詳解
這篇文章主要介紹了Android Jetpack架構(gòu)組件 ViewModel詳解,ViewModel類讓數(shù)據(jù)可在發(fā)生屏幕旋轉(zhuǎn)等配置更改后繼續(xù)存在,ViewModel類旨在以注重生命周期的方式存儲和管理界面相關(guān)的數(shù)據(jù)。感興趣可以來學(xué)習(xí)一下2020-07-07
Android圖片實(shí)現(xiàn)壓縮處理的實(shí)例代碼
本篇文章主要介紹了Android圖片實(shí)現(xiàn)壓縮處理的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
Flutter app頁面路由以及路由攔截的實(shí)現(xiàn)
本篇介紹了介紹了Flutter如何使用路由來實(shí)現(xiàn)頁面的跳轉(zhuǎn),從而簡化頁面之間的耦合,并可以實(shí)現(xiàn)路由攔截。2021-06-06
Kotlin新手基礎(chǔ)學(xué)習(xí)之Elvis操作符
Kotlin 是一種在 Java 虛擬機(jī)上運(yùn)行的靜態(tài)類型編程語言,被稱之為 Android 世界的Swift,由 JetBrains 設(shè)計(jì)開發(fā)并開源,下面這篇文章主要給大家介紹了關(guān)于Kotlin新手基礎(chǔ)學(xué)習(xí)之Elvis操作符的相關(guān)資料,需要的朋友可以參考下。2017-12-12

