Android短信相关
来源:互联网 发布:中经网产业数据库账号 编辑:程序博客网 时间:2024/05/22 15:47
1、准备工作:SMS涉及的主要类SmsManager
实现SMS主要用到SmsManager类,该类继承自java.lang.Object类,下面我们介绍一下该类的主要成员。公有方法:
ArrayList<String> divideMessage(String text)
当短信超过SMS消息的最大长度时,将短信分割为几块。
参数:text——初始的消息,不能为空
返回值:有序的ArrayList<String>,可以重新组合为初始的消息
static SmsManager getDefault()
获取SmsManager的默认实例。
返回值:SmsManager的默认实例
发送一个基于SMS的数据到指定的应用程序端口。
参数:
1)、destinationAddress——消息的目标地址
2)、scAddress——服务中心的地址or为空使用当前默认的SMSC
3)destinationPort——消息的目标端口号
4)、data——消息的主体,即消息要发送的数据
5)、sentIntent——如果不为空,当消息成功发送或失败这个PendingIntent就广播。结果代码是Activity.RESULT_OK表示成功,或RESULT_ERROR_GENERIC_FAILURE、RESULT_ERROR_RADIO_OFF、RESULT_ERROR_NULL_PDU之一表示错误。对应RESULT_ERROR_GENERIC_FAILURE,sentIntent可能包括额外的“错误代码”包含一个无线电广播技术特定的值,通常只在修复故障时有用。
每一个基于SMS的应用程序控制检测sentIntent。如果sentIntent是空,调用者将检测所有未知的应用程序,这将导致在检测的时候发送较小数量的SMS。
6)、deliveryIntent——如果不为空,当消息成功传送到接收者这个PendingIntent就广播。
异常:如果destinationAddress或data是空时,抛出IllegalArgumentException异常。
发送一个基于SMS的多部分文本,调用者应用已经通过调用divideMessage(String text)将消息分割成正确的大小。
参数:
1)、destinationAddress——消息的目标地址
2)、scAddress——服务中心的地址or为空使用当前默认的SMSC
3)、parts——有序的ArrayList<String>,可以重新组合为初始的消息
4)、sentIntents——跟SendDataMessage方法中一样,只不过这里的是一组PendingIntent
5)、deliverIntents——跟SendDataMessage方法中一样,只不过这里的是一组PendingIntent
异常:如果destinationAddress或data是空时,抛出IllegalArgumentException异常。
发送一个基于SMS的文本。参数的意义和异常前面的已存在的一样,不再累述。
常量:
public static final int RESULT_ERROR_GENERIC_FAILURE
表示普通错误,值为1(0x00000001)
public static final int RESULT_ERROR_NO_SERVICE
表示服务当前不可用,值为4 (0x00000004)
public static final int RESULT_ERROR_NULL_PDU
表示没有提供pdu,值为3 (0x00000003)
public static final int RESULT_ERROR_RADIO_OFF
表示无线广播被明确地关闭,值为2 (0x00000002)
public static final int STATUS_ON_ICC_FREE
表示自由空间,值为0 (0x00000000)
public static final int STATUS_ON_ICC_READ
表示接收且已读,值为1 (0x00000001)
public static final int STATUS_ON_ICC_SENT
表示存储且已发送,值为5 (0x00000005)
public static final int STATUS_ON_ICC_UNREAD
表示接收但未读,值为3 (0x00000003)
public static final int STATUS_ON_ICC_UNSENT
表示存储但为发送,值为7 (0x00000007)
2、准备工作:SmsMessage类
顾名思义,SmsMessage类是一个表示短信的类,为了更好地了解Android的短信机制及以后更好地编写短信相关程序,这里介绍一下该类的公有方法和常量,及嵌套枚举、类成员。
公有方法:
public static int[] calculateLength (CharSequence msgBody, boolean use7bitOnly)
参数:
msgBody-要封装的消息、use7bitOnly-如果为TRUE,不是广播特定7-比特编码的部分字符被认为是单个空字符;如果为FALSE,且msgBody包含非7-比特可编码字符,长度计算使用16-比特编码。
返回值:
返回一个4个元素的int数组,int[0]表示要求使用的SMS数量、int[1]表示编码单元已使用的数量、int[2]表示剩余到下个消息的编码单元数量、int[3]表示编码单元大小的指示器。
public static int[] calculateLength (String messageBody, boolean use7bitOnly)
参数和返回值跟上面类似
public static SmsMessage createFromPdu (byte[] pdu)
从原始的PDU(protocol description units)创建一个SmsMessage。这个方法很重要,在我们编写短信接收程序要用到,它从我们接收到的广播意图中获取的字节创建SmsMessage。
public String getDisplayMessageBody()
返回短信消息的主体,或者Email消息主体(如果这个消息来自一个Email网关)。如果消息主体不可用,返回null。这个方法也很重要,在我们编写短信接收程序也要用到。
public String getDisplayOriginatingAddress ()
返回信息来源地址,或Email地址(如果消息来自Email网关)。如果消息主体不可用,返回null。这个方法在来电显示,短信接收程序中经常用到。
public String getEmailBody ()
如果isEmail为TRUE,即是邮件,返回通过网关发送Email的地址,否则返回null。
public int getIndexOnIcc ()
返回消息记录在ICC上的索引(从1开始的)
public String getMessageBody ()
以一个String返回消息的主体,如果它存在且是基于文本的。
public SmsMessage.MessageClass getMessageClass ()
返回消息的类。
public String getOriginatingAddress ()
以String返回SMS信息的来电地址,或不可用时为null。
public byte[] getPdu ()
返回消息的原始PDU数据。
public int getProtocolIdentifier ()
获取协议标识符。
public String getPseudoSubject ()
public String getServiceCenterAddress ()
返回转播消息SMS服务中心的地址,如果没有的话为null。
public int getStatus ()
GSM:为一个SMS-STATUS-REPORT消息,它返回状态报告的status字段。这个字段表示之前提交的SMS消息的状态。
CDMA:为不影响来自GSM的状态码,值移动到31-16比特。这个值由一个error类(25-16比特)和一个状态码(23-16比特)组成。
如果是0,表示之前发送的消息已经被收到。
public int getStatusOnIcc ()
返回消息在ICC上的状态(已读、未读、已发送、未发送)。有下面的几个值:SmsManager.STATUS_ON_ICC_FREE、SmsManager.STATUS_ON_ICC_READ、SmsManager.STATUS_ON_ICC_UNREAD、SmsManager.STATUS_ON_ICC_SEND、SmsManager.STATUS_ON_ICC_UNSENT这几个值在上篇的SmsManager类介绍有讲到。
public static SmsMessage.SubmitPdu getSubmitPdu (String scAddress, String destinationAddress, short destinationPort, byte[] data, boolean statusReportRequested)
参数:scAddress - 服务中心的地址(Sercvice Centre address,为null即使用默认的)、destinationAddress - 消息的目的地址、destinationPort- 发送消息到目的的端口号、data - 消息数据。
返回值:一个包含编码了的SC地址(如果指定了的话)和消息内容的SubmitPdu,否则返回null,如果编码错误。
public static SmsMessage.SubmitPdu getSubmitPdu (String scAddress, String destinationAddress,String message, boolean statusReportRequested)
和上面类似。
public static int getTPLayerLengthForPDU (String pdu)
返回指定SMS-SUBMIT PDU的TP-Layer-Length,长度单位是字节而不是十六进字符。
public long getTimestampMillis ()
以currentTimeMillis()格式返回服务中心时间戳。
public byte[] getUserData ()
返回用户数据减去用户数据头部(如果有的话)
public boolean isCphsMwiMessage ()
判断是否是CPHS MWI消息
public boolean isEmail ()
判断是否是Email,如果消息来自一个Email网关且Email发送者(sender)、主题(subject)、解析主体(parsed body)可用,则返回TRUE。
public boolean isMWIClearMessage ()
判断消息是否是一个CPHS 语音邮件或消息等待MWI清除(clear)消息。
public boolean isMWISetMessage ()
判断消息是否是一个CPHS 语音邮件或消息等待MWI设置(set)消息。
public boolean isMwiDontStore ()
如果消息是一个“Message Waiting Indication Group:Discard Message”通知且不应该保存,则返回TRUE,否则返回FALSE。
public boolean isReplace ()
判断是否是一个“replace short message”SMS
public boolean isReplyPathPresent ()
判断消息的TP-Reply-Path位是否在消息中设置了。
public boolean isStatusReportMessage ()
判断是否是一个SMS-STATUS-REPORT消息。
常量值:
public static final int ENCODING_16BIT :值为3(0x00000003)
public static final int ENCODING_8BIT :值为2 (0x00000002)
public static final int ENCODING_UNKNOWN :值为0 (0x00000000) ,用户数据编码单元的大小。
public static final int MAX_USER_DATA_BYTES :值为140 (0x0000008c),表示每个消息的最大负载字节数。
public static final int MAX_USER_DATA_BYTES_WITH_HEADER :134 (0x00000086),如果一个用户数据有头部,该值表示它的最大负载字节数,该值假定头部仅包含CONCATENATED_8_BIT_REFENENCE元素。
public static final int MAX_USER_DATA_SEPTETS :值为160 (0x000000a0) ,表示每个消息的最大负载septets数。
public static final int MAX_USER_DATA_SEPTETS_WITH_HEADER :值为153 (0x00000099),如果存在用户数据头部,则该值表示最大负载septets数该值假定头部仅包含CONCATENATED_8_BIT_REFENENCE元素。
嵌套枚举成员SmsMessage.MessageClass的枚举值:
public static final SmsMessage.MessageClass CLASS_0
public static final SmsMessage.MessageClass CLASS_1
public static final SmsMessage.MessageClass CLASS_2
public static final SmsMessage.MessageClass CLASS_3
public static final SmsMessage.MessageClass CLASS_UNKNOWN
嵌套枚举成员SmsMessage.MessageClass的公有方法:
public static SmsMessage.MessageClass valueOf (String name):返回值的字符串的值
public static final MessageClass[] values ():返回MessageClass的值数组
嵌套类成员SmsMessage.SubmitPdu的字段:
public byte[] encodedMessage :编码了的消息
public byte[] encodedScAddress :编码的服务中心地址
嵌套类成员SmsMessage.SubmitPdu的公有方法:
public String toString ()
返回一个包含简单的、可读的这个对象的描述字符串。鼓励子类去重写这个方法,并提供实现对象的类型和数据。默认实现简单地连接类名、@、十六进制表示的对象哈希码,即下面的形式: getClass().getName() + '@' + Integer.toHexString(hashCode())
- Android 短信会话相关
- Android短信相关
- Android电话、短信相关
- Android短信系统相关
- Android短信相关
- Android短信的相关知识
- Android 短信相关的权限和支持的短信协议
- Android中短信相关信息的数据库
- Android中短信相关信息的数据库
- Android短信开发相关信息记录
- android短信发送相关代码整理
- Android短信发送相关的恶意行为
- Android开发短信相关的知识
- 短信相关
- 短信相关
- Android短信彩信开发手记(一):数据库相关
- Android短信彩信开发手记(一):数据库相关
- android典型代码系列(二十九)------短信数据库操作相关
- 从1到n的数中找若干个数使其和为m
- 开始写社会化分享组件
- 关于爱,我们在行动
- Oracle SCN详解
- UVA 1401
- Android短信相关
- iBatis 到 MyBatis区别
- 尝试CameraCalibration库
- D - Fast Bit Calculations
- Ubuntu 11.04 下安装配置 JDK 7
- PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/module.so'
- Eclipse下运行Maven项目提示缺乏maven-resources-plugin:2.4.3
- DataMing Papers:<The alternating decision tree learning algorithm>
- SDJZ2537LOL如何拯救小学生