以前已經知道傳送簡訊有70個字元的限制,但真到用的時候才發現還是不了解。中文英文各算幾個字元?一開始按照老想法,gb碼中文2個位元組英文乙個位元組來算,按70個漢字的限制可以發140個位元組,但是傳送的時候總是出錯。後來在網上查了下簡訊的編碼才知道,現在傳送簡訊通常使用pdu模式,摘抄一段:
在pdu mode中,可以採用三種編碼方式來對傳送的內容進行編碼,它們是7-bit、8-bit和ucs2編碼。7-bit編碼用於傳送普通的ascii字元,它將一串7-bit的字元(最高位為0)編碼成8-bit的資料,每8個字元可「壓縮」成7個;8-bit編碼通常用於傳送資料訊息,比如和鈴聲等;而ucs2編碼用於傳送unicode字元。pdu串的使用者資訊(tp-ud)段最大容量是140位元組,所以在這三種編碼方式下,可以傳送的短訊息的最大字元數分別是160、140和70。這裡,將乙個英文本母、乙個漢字和乙個資料位元組都視為乙個字元。需要注意的是,pdu串的使用者首席資訊官度(tp-udl),在各種編碼方式下意義有所不同。7-bit編碼時,指原始短訊息的字元個數,而不是編碼後的位元組數。8-bit編碼時,就是位元組數。ucs2編碼時,也是位元組數,等於原始短訊息的字元數的兩倍。
這下就明白了,傳送帶中文的簡訊時是用ucs2編碼,無論中英文還是符號空格都是按乙個字元算,總共70個,超過乙個傳送簡訊就會出錯。而傳送純英文簡訊時使用7-bit編碼,就可以傳送160個字元了。
smsmanager有乙個dividemessage函式,可以把要字串按照限制來分割成可以發的訊息。試了一下,確實可以用,不過有中文的時候分出來的簡訊是67個字元而不是70個,可能是和我用的聯想的測試機有關。在g1這些機子上不知道是否正常。
如果傳送的簡訊有一段中文後面還有一段url,這時用dividemessage來機械的分就不好了,要把url單獨放在一條簡訊裡,
這時還是需要自己手動來分的。
android傳送簡訊
smsmanager sm smsmanager.getdefault arraylist smss sm.dividemessage content for string string smss parameters destinationaddress 簡訊接收人的 號碼 scaddress 簡...
android傳送簡訊
利用類 smsmanager 傳送資訊,smsmanager 為 smsmanager 乙個預設的例項.smsmanager smsmanager smsmanager.getdefault smsmanager.sendtextmessage destinationaddress,scaddres...
Android傳送簡訊
android傳送簡訊有兩種方式是 一 呼叫簡訊程式 二 直接傳送簡訊。第一種的 如下 1 2 3 4 5 6 7 uri uri uri.parse smsto 5554 intent i newintent intent.action sendto,uri i.putextra sms body...