android手机短信的收发(1)

  • 格式:pdf
  • 大小:488.06 KB
  • 文档页数:11

======================================================= Android 手机短信的收发(1)(参考资料来源于网络或官方文档 整理日期:2011.1)一、android 基础知识1、广播接收者广播接收者是这样一个组件,它不做什么事,仅是接受广播公告并作出相应的反应。

许多广播源自于系统代码,例如公告时区的改变、电池电量低、已采取图片、用户改变了语言偏好。

应用程序也可以发起广播,例如为了他其他程序知道某些数据已经下载到设备且他们可以使用这些数据。

一个应用程序可以有任意数量的广播接收者去反应任何它认为重要的公告。

所有的接受者继承自BroadcastReceiver 基类。

广播接收者不显示一个用户界面。

然而,它们启动一个活动去响应收到的信息,或者他们可能使用NotificationManager 去通知用户。

通知可以使用多种方式获得用户的注意——闪烁的背光、振动设备、播放声音等等。

典型的是放在一个持久的图标在状态栏,用户可以打开获取信息。

2、广播接收者相关类BroadcastReceiver 类:是接受sendBroadcast()发送的意图(intents )的基类。

可以用Context.registerReceiver()动态地注册这个类的实例,或者通过AndroidManifest.xml 中<receiver>标签静态发布。

注意:如果你在Activity.onResume() 注册一个接受者,你应该在Activity.onPause()注销它。

因为当暂停时你不会收到意图,注销它将削减不必要的系统开销。

不要在Activity.onSaveInstanceState()中注销它,因为它将不会被调用,如果用户移=======================================================动到先前的堆栈。

有两种主要的可接受广播类型:正常广播(由Context.sendBroadcast 发送)是完全异步的。

所有的广播接收者以无序方式运行,往往在同一时间接收。

这样效率较高,但是意味着接受者不能使用结果或终止广播数据传播。

有序广播(由Context.sendOrderedBroadcast 发送)一次传递给一个接收者。

由于每个接收者依次执行,因此它可以传播到下一个接收器,也可以完全终止传播以便他不会传递给其他接收者。

接收者的运行顺序可由匹配的意图过滤器(intent-filter )的android:priority 属性控制。

3、发送短信类SmsManager实现短信收发主要用到SmsManager 类,该类继承自ng.Object 类,该类的主要成员如下:公有方法:² ArrayList<String> divideMessage(String text)当短信超过SMS 消息的最大长度时,将短信分割为几块。

参数:text ——初始的消息,不能为空返回值:有序的ArrayList<String>,可以重新组合为初始的消息 ² static SmsManager getDefault()获取SmsManager 的默认实例。

返回值:SmsManager 的默认实例² void SendDataMessage(String destinationAddress, String scAddress,=======================================================short destinationPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent)发送一个基于SMS 的数据到指定的应用程序端口。

参数:1)、destinationAddress ——消息的目标地址2)、scAddress ——服务中心的地址or 为空使用当前默认的SMSC3)、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 异常。

=======================================================² void sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliverIntents)发送一个基于SMS 的多部分文本,调用者应用已经通过调用divideMessage(String text)将消息分割成正确的大小。

参数:1)、destinationAddress ——消息的目标地址2)、scAddress ——服务中心的地址or 为空使用当前默认的SMSC3)、parts ——有序的ArrayList<String>,可以重新组合为初始的消息4)、sentIntents ——跟SendDataMessage 方法中一样,只不过这里的是一组PendingIntent5)、deliverIntents ——跟SendDataMessage 方法中一样,只不过这里的是一组PendingIntent异常:如果destinationAddress 或data 是空时,抛出IllegalArgumentException 异常。

² void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)发送一个基于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)二、收发短信实例例题:设计一个android 应用程序,可以实现发送短信。

分析:1、界面设计=======================================================如下图所示:粗略的设计了一下,具体代码如下:(main.xml )=======================================================android:lines ="1"/><TextView android:layout_width ="fill_parent"android:layout_height ="wrap_content"android:text ="@string/message"/><EditTextandroid:id ="@+id/et02"android:layout_width ="fill_parent"android:layout_height ="wrap_content"android:lines ="5"/><Buttonandroid:id ="@+id/butt01"android:layout_width ="wrap_content"android:layout_height ="wrap_content"android:text ="@string/send"/></LinearLayout >2、权限设置在AndroidManifest.xml 中加入权限:<uses-permission android:name="android.permission.SEND_SMS"/>3、程序设计与实现直接上代码吧,里面加了注释,如果还不清楚,请直接发邮件,本人发送源代码。