android 4.2.1短信SMS常用接口整理
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()计算当前短信按照协议打包之后的信息,包括短信需要打包成几段,最后一段还剩多少空间等内容。在编辑短信界面显示剩余字数就有用到。
fragmentText()这个在SmsManager中和divideMessage用到,就不多说了。这之后的方法都是get方法,返回短信类型中的一些标记。
最后补充一句,有些方法和作用域前面有@hide字段,表示不对外公开api,但是系统内部是可以使用的。不过使用反射貌似也能用。:)短信中常用到的接口就整理到这里,方便自己以后记忆。希望自己能带着这些去看看3GPP协议,:)。
补充:移动开发 , Android ,