Android开发学习教程—Android短信的收发及android模拟器实践(二)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

引言前面我们介绍都只是如何发送SMS消息,接下来我们介绍如何接收SMS消息,及另一种发短信的方式并增强为可以发生图片等,最后介绍一下emulator工具。本文的主要内容如下:1~5见Android开发之旅:短信的收发及在android模拟器之间实践(一)6、温故知新之Intent7、准备工作:SmsMessage类8、SMS接收程序9、另一种发送短信的方式:使用Intent10、增强SMS为MMS6、温故知新之Intent此系列前面简单地接受过意图(Intent),这里再次简单介绍一下,在短信接收程序和使用Intent发送SMS中我们要用到。android应用程序的三大组件——Activities、Services、BroadcastReceiver,通过消息触发,这个消息就称作意图(Intent)。下面以Acitvity为例,介绍一下Intent。Android用Intent这个特殊的类实现在Activity与Activity之间的切换。Intent类用于描述应用的功能。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。典型的动作类型有MAIN、VIEW、PICK、EDIT等,我们在短信接收程序中就用到从广播意图中提取动作类型并判断是否是”android.provider.Telephony.SMS_RECEIVED”,进而作深一步的处理。而动作对应的数据则以URI的形式表示。例如,要查看一个人的联系方式,需要创建一个动作为VIEW的Intent,以及表示这个人的URI。通过解析各种Intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,Activity将会调用startActivity(“指定一个Intent”)方法。然后,系统会在所有已安装的应用程序中定义的IntentFilter中查找,找到最匹配的Intent对应的Activity。新的Activity接收到指定的Intent的通知后,开始运行。当startActivity()方法被调用时,将触发解析指定Intent的动作,该机制提供了两个关键的好处:Activity能够重复利用从其他组件中以Intent形式产生的请求。Activity可以在任何时候被具有相同IntentFilter的新的Activity取代。7、准备工作:SmsMessage类顾名思义,SmsMessage类是一个表示短信的类,为了更好地了解Android的短信机制及以后更好地编写短信相关程序,这里介绍一下该类的公有方法和常量,及嵌套枚举、类成员。公有方法:publicstaticint[]calculateLength(CharSequencemsgBody,booleanuse7bitOnly)参数:msgBody-要封装的消息、use7bitOnly-如果为TRUE,不是广播特定7-比特编码的部分字符被认为是单个空字符;如果为FALSE,且msgBody包含非7-比特可编码字符,长度计算使用16-比特编码。返回值:返回一个4个元素的int数组,int[0]表示要求使用的SMS数量、int[1]表示编码单元已使用的数量、int[2]表示剩余到下个消息的编码单元数量、int[3]表示编码单元大小的指示器。publicstaticint[]calculateLength(StringmessageBody,booleanuse7bitOnly)参数和返回值跟上面类似publicstaticSmsMessagecreateFromPdu(byte[]pdu)从原始的PDU(protocoldescriptionunits)创建一个SmsMessage。这个方法很重要,在我们编写短信接收程序要用到,它从我们接收到的广播意图中获取的字节创建SmsMessage。publicStringgetDisplayMessageBody()返回短信消息的主体,或者Email消息主体(如果这个消息来自一个Email网关)。如果消息主体不可用,返回null。这个方法也很重要,在我们编写短信接收程序也要用到。publicStringgetDisplayOriginatingAddress()返回信息来源地址,或Email地址(如果消息来自Email网关)。如果消息主体不可用,返回null。这个方法在来电显示,短信接收程序中经常用到。publicStringgetEmailBody()如果isEmail为TRUE,即是邮件,返回通过网关发送Email的地址,否则返回null。publicintgetIndexOnIcc()返回消息记录在ICC上的索引(从1开始的)publicStringgetMessageBody()以一个String返回消息的主体,如果它存在且是基于文本的。publicSmsMessage.MessageClassgetMessageClass()返回消息的类。publicStringgetOriginatingAddress()以String返回SMS信息的来电地址,或不可用时为null。publicbyte[]getPdu()返回消息的原始PDU数据。publicintgetProtocolIdentifier()获取协议标识符。publicStringgetPseudoSubject()publicStringgetServiceCenterAddress()返回转播消息SMS服务中心的地址,如果没有的话为null。publicintgetStatus()GSM:为一个SMS-STATUS-REPORT消息,它返回状态报告的status字段。这个字段表示之前提交的SMS消息的状态。CDMA:为不影响来自GSM的状态码,值移动到31-16比特。这个值由一个error类(25-16比特)和一个状态码(23-16比特)组成。如果是0,表示之前发送的消息已经被收到。publicintgetStatusOnIcc()返回消息在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类介绍有讲到。publicstaticSmsMessage.SubmitPdugetSubmitPdu(StringscAddress,StringdestinationAddress,shortdestinationPort,byte[]data,booleanstatusReportRequested)参数:scAddress-服务中心的地址(SercviceCentreaddress,为null即使用默认的)、destinationAddress–消息的目的地址、destinationPort-发送消息到目的的端口号、data–消息数据。返回值:一个包含编码了的SC地址(如果指定了的话)和消息内容的SubmitPdu,否则返回null,如果编码错误。publicstaticSmsMessage.SubmitPdugetSubmitPdu(StringscAddress,StringdestinationAddress,Stringmessage,booleanstatusReportRequested)和上面类似。publicstaticintgetTPLayerLengthForPDU(Stringpdu)返回指定SMS-SUBMITPDU的TP-Layer-Length,长度单位是字节而不是十六进字符。publiclonggetTimestampMillis()以currentTimeMillis()格式返回服务中心时间戳。publicbyte[]getUserData()返回用户数据减去用户数据头部(如果有的话)publicbooleanisCphsMwiMessage()判断是否是CPHSMWI消息publicbooleanisEmail()判断是否是Email,如果消息来自一个Email网关且Email发送者(sender)、主题(subject)、解析主体(parsedbody)可用,则返回TRUE。publicbooleanisMWIClearMessage()判断消息是否是一个CPHS语音邮件或消息等待MWI清除(clear)消息。publicbooleanisMWISetMessage()判断消息是否是一个CPHS语音邮件或消息等待MWI设置(set)消息。publicbooleanisMwiDontStore()如果消息是一个“MessageWaitingIndicationGroup:DiscardMessage”通知且不应该保存,则返回TRUE,否则返回FALSE。publicbooleanisReplace()判断是否是一个“replaceshortmessage”SMSpublicbooleanisReplyPathPresent()判断消息的TP-Reply-Path位是否在消息中设置了。publicbooleanisStatusReportMessage()判断是否是一个SMS-STATUS-REPORT消息。常量值:publicstaticfinalintENCODING_16BIT:值为3(0×00000003)publicstaticfinalintENCODING_8BIT:值为2(0×00000002)publicstaticfinalintENCODING_UNKNOWN:值为0(0×00000000),用户数据编码单元的大小。publicstaticfinalintMAX_USER_DATA_BYTES:值为140(0x0000008c),表示每个消息的最大负载字节数。publicstaticfinalintMAX_USER_DATA_BYTES_WITH_HEADER:134(0×00000086),如果一个用户数据有头部,该值表示它的最大负载字节数,该值假定头部仅包含CONCATENATED_8_BIT_REFENENCE元素。publicstaticfinalintMAX_USER_DATA_SEPTETS:值为160(0x000000a0),表示每个消息的最大负载septets数。publicstaticfinalintMAX_USER_DATA_SEPTETS_WITH_HEADER:值为153(0×00000099),如果存在用户数据头部,则该值表示最大负载septets数该值假定头部仅包含CONCATENATED_8_BIT_REFENENCE元素。嵌套枚举成员SmsMessage.MessageClass的枚举值:publicstaticfinalSmsMessage.MessageClassCLASS_0publicstaticfinalSmsMessage.MessageClassCLASS_1publicstaticfinalSmsMessage.MessageClassCLASS_2publicstaticfinalSmsMessage.MessageClassCLASS_3publicstaticfinalSmsMessage.MessageClassCLASS_UNKNOWN嵌套枚举成员SmsMessage.MessageClass的公有方法:publicstaticSmsMessage.MessageClassvalueOf(Stringname):返回值的字符串的值publicstaticfinalMessageClass[]values():返回MessageClass的值数组嵌套类成员SmsMessage.SubmitPdu的字段:publicbyte[]

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功