码迷,mamicode.com
首页 > 其他好文 > 详细

SMS

时间:2016-05-06 12:36:50      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:

1.SIM卡短信

IccConstants.java

staticfinal intEF_SMS = 0x6F3C;


技术分享













2.PDU格式及用法


if (statusReportRequested) {
    // Set TP-Status-Report-Request bit.
    mtiByte |= 0x20;
    if (VDBG) Rlog.d(LOG_TAG, "SMS status report requested");
}
// (TP-Validity-Period)
if ((mtiByte & 0x10) != 0) {
    Rlog.d(LOG_TAG, "Write validity period into pdu:" + validityPeriod);
    bo.write(validityPeriod);
}


SubmitPdu ret = new SubmitPdu();
//PDU Type
ByteArrayOutputStream bo = getSubmitPduHead(scAddress, destinationAddress, mtiByte, statusReportRequested, ret);
// space for TP-Message-Reference #bo.write(0);
// destination address #bo.write(daBytes, 0, daBytes.length);
// TP-Protocol-Identifier #bo.write(0);
// TP-Data-Coding-Scheme
// (TP-Validity-Period)
// User Data (and length) #bo.write(userData, 0, userData.length);

技术分享


技术分享


技术分享


技术分享


3.SMS编码方案与编码实现

缺省的GSM字符集为7位编码,Bit8可以被忽略。依次将下一位7位编码的后几位逐次移至前面,形成新的8位编码。


4.RILJ

Android RIL提供了无线硬件设备与电话服务之间的抽象层

RIL.java中定义了一个JavaRILRequest代表着一个即将发送出去的RIL请求,它里面包含了Request请求号、序列号(自0开始累加)和保存请求结果的Message。Java部分的Request请求号就是上述的RILConstants.java中的常量(与C/C++部分的请求号保持一致)。当需要执行某种RIL请求时,则需创建一个新的RILRequest——使用RILRequestobtain函数

以短信中心为例:

RILRequestrr = RILRequest.obtain(RIL_REQUEST_SET_SMSC_ADDRESS,result);

使用者在使用RIL请求API时,通过sender线程向rild发送RIL请求,具体是:在这些API函数中,得到一个RILRequest(通过其obtain静态函数)后,将要传递给RIL请求的数据写入到socket中,rild侧解析得到传递来的数据,根据请求号调用相应的分发函数转换成AT命令发送给Modem

Java接口类CommandsInterface定义了与RILJrild交互的接口。RILConstants.java文件定义了RIL的各种请求request号和unsolicited号,它们必须与ril.h中的定义保持一致,用于标识请求号和unsolicited消息号。这些标识号也必须出现在ril_commands.hril_unsol_commands.h中定义的数组元素中

BaseCommands.java中的BaseCommands类实现了CommandsInterface的部分接口,用于通知手机各种内部状态的变化。它里面包含了很多注册者Registrant和注册者列表RegistrantList它们代表着对某些事件感兴趣希望接收事件变化通知的接收者。另外,还提供了大量的registerXXXunregisterXXX函数。当对某种状态变化感兴趣时,就可以调用registerXXX函数将自己注册为一个对某种状态感兴趣的通知接收者。注册时,在BaseCommands内部创建一个对应的registrant或将registrant添加到列表registrantList中。registrantList表示某种状态有多个感兴趣者,因此将registrant添加到RegistrantList


技术分享

5.AT

1.短息中心号码:at+csca

  该指令用来设置短信中心号码。负责转播和存储转发SMEMS之间的短消息。如果MS,支持SMS-MO(短消息服务移动发送),为了使用SMS,必须在MS中设置SMSC(短消息服务中心,SCA)。查看存储在SIM卡中的当前服务中心地址:AT+CSCA?


2.选择短信服务:at+csms

  该指令用于持的短消息包括:发送(SMS-MO)、接收(SMS-MT)、小区广播(SMS-CB)


3.设置短消息模式:at+cmgf

  该指令用于设置短信的输入模式。


4.读取短信列表:at+cmgl;储存位置的列表 at+cpms

  at+cmgl该指令用于取某一类存储的短信,短信会被从+cpms指令选取的当前的存储器中读取出来。

  at+cpms该指令用于读取手机所支持的存储位置的列表。


5.发送短消息:at+cmgs

  该指令用于将短消息从模块发送到网络,短消息发送成功后网络返回参考值<mr>给模块。


6.写短消息到存储器:at+cmgw

  该指令用于往存储器中写入短消息,正确存储后返回位置信息<index>


7.写短消息到存储器:at+cmgd

  该指令用于从当期存储器中删除某一条短消息

<index>:存储的短息的记录号

<delflag>:删除标记

0:删除指定记录号的短息

1有已读的短息

2除所有已读和已发送的短息

3除所有已读、已发送和未发送的短息

4除所有短息


8.重复执行上一条指令a/





SMS

标签:

原文地址:http://blog.csdn.net/sinat_34157462/article/details/51328984

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!