Android上短信功能基本很穩定了,一般很少維護,所以感覺總是很陌生。%>_<% 這裡總結下4.2.1上原生Mms用到的短信接口,以便在此基礎上記憶。android的framework對上層短信提供的接口基本都在SmsManager和SmsMessage。個人總結前者主要提供了發送短信及其周邊功能,後者提供了計算長度解析短信編碼等針對短信內容的功能。
先說說SmsManager這個類:
sendTextMessage()根據後面的調用,可以知道這個是協議上發送一條短信的方法。協議上的一條短信是指一條短信不能超過140個字節,即70個漢字。這個方法在原生短信中沒有調用,盡在該類的另外一個方法中有用到。
divideMessage()將一個字符串根據協議分成若干個短信段。這個方法會在SmsSingleRecipientSender.java,原生短信模塊中最終發送短信的類中用到。稍微注意下這個方法就能發現一條長短信中,從第二個分斷短信開始,由於增加了一些字段可供存儲內容空間變小了。
sendMultipartTextMessage()android原生代碼中,應用層調用的發短信方法。從這裡開始就和應用沒有關系了。
sendDataMessage()從字面意思可以理解到其意思,但是沒有見在哪裡用過,先知道有這個方法存在。
copyMessageToIcc()也沒有看到在哪裡用到,同樣先知道。
deleteMessageFromIcc()這個在短信數據庫裡面有用到,刪除sim卡上短信。
updateMessageOnSim()也很少用到。
getAllMessagesFromIcc()還是在短信數據庫中用到。
後面的方法基本都和短信功能關系不大,就不一一說明。我們可以看出,在這裡我們只要記住並且熟悉sendMultipartTextMessage()和divideMessage()兩個接口就差不多了,如果真有必要寫發送短信功能代碼,這兩個接口就足夠了。
再說說SmsMessage。這個類裡的方法可以說是根據協議一個個實現的。注釋裡面也說明了其參考了TS 23.038協議。
createFromPdu()根據注釋可以知道是在收到短信的情況下,將下面發上來廣播中的內容解析成短信。原生短信中用的是該方法的重載方法。
createFromPdu()這個方法的重載方法,參數列表中多了一個短信類型。因為GSM和CDMA短信解碼方式不一樣。下層在往上層發送廣播的時候會提供當前短信類型,根據這個類型就可以知道是用GSM還是CDMA去解析短信。
newFromCMT(),newFromParcel(),createFromEfRecord(),getTPLayerLengthForPDU()這幾個方法一般不常用,大概有個印象就行。
calculateLength()計算當前短信按照協議打包之後的信息,包括短信需要打包成幾段,最後一段還剩多少空間等內容。在ComposeMessageActivity.java這個編輯短信界面顯示剩余字數的updateCounter方法裡面就有用到。
fragmentText()這個在SmsManager中和divideMessage用到,就不多說了。這之後的方法都是get方法,返回短信類型中的一些標記。
最後補充一句,有些方法和作用域前面有@hide字段,表示不對外公開api,但是系統內部是可以使用的。不過使用反射貌似也能用。:)短信中常用到的接口就整理到這裡,方便自己以後記憶。希望自己能帶著這些去看看3GPP協議。:)
更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11