欢迎来到天天文库
浏览记录
ID:18348298
大小:76.98 KB
页数:8页
时间:2018-09-16
《android开发之关于复制短信到sim卡的分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、www.accpbj.comAndroid开发之关于复制短信到SIM卡的分析 在framework层下的SmsManager类中,封装好了一个copyMessageToIcc方法,只要正确地调用它便可以将短信存储到SIM卡中。SmsManagersmsManager=SmsManager.getDefault();//用来获取一个SmsManager对象现在我们来看一下copyMessageToIcc(byte[]smsc,byte[]pdu,intstatus)这个方法的三个参数: 1)byte[]smsc:短信服务
2、中心的地址,个人认为在复制到SIM卡过程中可以为空。 2)byte[]pdu:中文翻译是协议数据单元,这个参数最为重要,一会我们会做详细地解释说明。 3)intstatus:短信存储在Icc卡上的状态,有4种状态,1是已读,3是未读,5是已发送,7是未发送。 其实要想将将短信正确地存储到SIM卡上,pdu这个参数尤为重要,下面我们就来分析一下! 首先先看一下复制短信到SIM卡时log显示的正确pdu: 00000d91683155724572f9000b111170919143230a4e0b73ed4e864e48
3、ff1f 原本上面的pdu是完整连续,为了方便解释说明,特意加了空格区分开来。 00SCAddress短信服务中心地址,通常我们发送短信时会发送一个pdu到短信服务中心,然后短信服务中心会对pdu进行一些处理再发 送到目的手机,这其中就包括增加了这个SCAddress和后面会介绍的时间戳。 00PDUTypepdu的第一个八位位组,即一个八位的二进制数转变成十六进制而来,每一位代表什么意思呢?由高到低依次代表RP(应答 路径)、UDHI(用户数据头标识)、SRR(状态请求报告)、VPF(有效期格式,2位)、RD(拒绝
4、副本)、MTI(信息指示类型,2位),在这里我们其实只 要全部将其设置为0就好,于是便显示为00。 0d91683155724572f9这一段代表了目的手机的号码,0d代表后面的地址长度(二进制下为13),那么这十三个数是怎么算的呢?其实手机号为 13552754279,而91代表短消息中心地址的类型(81&h表示国内,91&h表示国际)。所以0d表示的就是后面683155724572f9的长度(f9中的f是用来 凑偶数位的)。good,noloosening.6.5.2DCSsidewiringtocompletet
5、heenclosureandtheothersideafterthewiringiscompleted,DCSwithintheenclosurewhenthepowermoduleshouldbeloosenedorthepowergoesout.6.6lowvoltagecableterminalmaking6.6.1firstwww.accpbj.com 00PID协议标识,通常设为00就好。 0bDCS数据编码方案,含有中文字符的话一般默认都为0b,即00001011转化而来,具体每一位的含义暂时不做详细解释。
6、11117091914323时间戳,代表的时间为11年11月07日19时19分34秒,后面的23表示时区(什么这么表示尚在研究中,可以写死,感觉意义 不大)。 0a4e0b73ed4e864e48ff1f短信的具体内容,其中0a表示信息的长度。 好了,关于pdu我们分析完了,现在要做的就是如何获取这个pdu并传进copyMessageToIcc方法中。观察源码会发现在 framework/base/telephony/java/com/android/internal/telephony/gsm下的SmsMessage
7、类中有一个getSubmitPdu方法,返回一个SubmitPdu对 象,该对象有encodedScAddress和encodedMessage两个byte[]数组类型的属性,而且在多个地方被用到,和copyMessageToIcc中的参数十分相 似,会不会就是我们要找的呢?经调用后发现,得到的pdu并不正确,但是没有关系,我们可以将其涉及到的方法重写,拼出我们想要的pdu! 我改写的代码如下: privateSubmitPdugetSubmitPdu(StringscAddress,Stringdestination
8、Address,Stringmessage, booleanstatusReportRequested,byte[]header,intencoding,longdate){ //Performnullparameterchecks. if(message==null
9、
此文档下载收益归作者所有