当前位置:首页 >> 信息与通信 >>

android手机短信的收发(1)

http://www.cmd100.com/bbs/?fromuid=3107 ===============

Android 手机短信的收发(1)
(参考资料来源于网络或官方文档 整理日期:2011.1)

一、android 基础知识 1、广播接收者 广播接收者是这样一个组件,它不做什么事,仅是接受广播公告并作 出相应的反应。许多广播源自于系统代码,例如公告时区的改变、电池电 量低、已采取图片、用户改变了语言偏好。应用程序也可以发起广播,例 如为了他其他程序知道某些数据已经下载到设备且他们可以使用这些数 据。一个应用程序可以有任意数量的广播接收者去反应任何它认为重要的 公告。所有的接受者继承自 BroadcastReceiver 基类。 广播接收者不显示一个用户界面。然而,它们启动一个活动去响应收 到的信息,或者他们可能使用 NotificationManager 去通知用户。通知可以 使用多种方式获得用户的注意——闪烁的背光、 振动设备、 播放声音等等。 典型的是放在一个持久的图标在状态栏,用户可以打开获取信息。 2、广播接收者相关类 BroadcastReceiver 类:是接受 sendBroadcast()发送的意图(intents)的 基类。可以用 Context.registerReceiver()动态地注册这个类的实例,或者通 过 AndroidManifest.xml 中 <receiver> 标 签 静 态 发 布 。 注 意 : 如 果 你 在 Activity.onResume() 注册一个接受者,你应该在 Activity.onPause()注销它。 因为当暂停时你不会收到意图,注销它将削减不必要的系统开销。不要在 Activity.onSaveInstanceState()中注销它,因为它将不会被调用,如果用户移 ======================================================= 制作人:wolftooth Email:dou_ding888 @ 163 . com
第 1 页 共 11 页

http://www.cmd100.com/bbs/?fromuid=3107 ===============
动到先前的堆栈。 有两种主要的可接受广播类型:

正常广播(由 Context.sendBroadcast 发送)是完全异步的。所有的广
播接收者以无序方式运行,往往在同一时间接收。这样效率较高,但是意 味着接受者不能使用结果或终止广播数据传播。

有序广播(由 Context.sendOrderedBroadcast 发送)一次传递给一个接
收者。由于每个接收者依次执行,因此它可以传播到下一个接收器,也可 以完全终止传播以便他不会传递给其他接收者。接收者的运行顺序可由匹 配的意图过滤器(intent-filter)的 android:priority 属性控制。 3、发送短信类 SmsManager 实现短信收发主要用到 SmsManager 类,该类继承自 java.lang.Object 类,该类的主要成员如下: 公有方法: ? ArrayList<String> divideMessage(String text) 当短信超过 SMS 消息的最大长度时,将短信分割为几块。 参数:text——初始的消息,不能为空 返回值:有序的 ArrayList<String>,可以重新组合为初始的消息 ? static SmsManager getDefault() 获取 SmsManager 的默认实例。 返回值:SmsManager 的默认实例 ? void SendDataMessage(String destinationAddress, String scAddress, ======================================================= 制作人:wolftooth Email:dou_ding888 @ 163 . com
第 2 页 共 11 页

http://www.cmd100.com/bbs/?fromuid=3107 ===============
short destinationPort, byte[] data, PendingIntent sentIntent,

PendingIntent deliveryIntent) 发送一个基于 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 异常。 ======================================================= 制作人:wolftooth Email:dou_ding888 @ 163 . com
第 3 页 共 11 页

http://www.cmd100.com/bbs/?fromuid=3107 ===============
? void sendMultipartTextMessage(String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent>

sentIntents, ArrayList<PendingIntent> deliverIntents) 发 送 一 个 基 于 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 异常。 ? void sendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) 发送一个基于 SMS 的文本。参数的意义和异常前面的已存在的一样。

常量: ? public static final int RESULT_ERROR_GENERIC_FAILURE ======================================================= 制作人:wolftooth Email:dou_ding888 @ 163 . com
第 4 页 共 11 页

http://www.cmd100.com/bbs/?fromuid=3107 ===============
表示普通错误,值为 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、界面设计 ======================================================= 制作人:wolftooth Email:dou_ding888 @ 163 . com
第 5 页 共 11 页

http://www.cmd100.com/bbs/?fromuid=3107 ===============
如下图所示:

粗略的设计了一下,具体代码如下: (main.xml)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/phone" /> <EditText android:id="@+id/et01" android:layout_width="fill_parent" android:layout_height="wrap_content"

======================================================= 制作人:wolftooth Email:dou_ding888 @ 163 . com
第 6 页 共 11 页

http://www.cmd100.com/bbs/?fromuid=3107 ===============
android:lines="1" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/message" /> <EditText android:id="@+id/et02" android:layout_width="fill_parent" android:layout_height="wrap_content" android:lines="5" /> <Button android: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、程序设计与实现 直接上代码吧,里面加了注释,如果还不清楚,请直接发邮件,本人 发送源代码。
package www.wolftooth; import java.util.ArrayList; import android.app.Activity; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsManager; import android.view.View; import android.widget.Button;

======================================================= 制作人:wolftooth Email:dou_ding888 @ 163 . com
第 7 页 共 11 页

http://www.cmd100.com/bbs/?fromuid=3107 ===============
import android.widget.EditText; import android.widget.Toast; public class SMSSender extends Activity { /** Called when the activity is first created. */ Button butt01; EditText et01,et02; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); et01=(EditText)findViewById(R.id.et01); et02=(EditText)findViewById(R.id.et02); butt01=(Button)findViewById(R.id.butt01); butt01.setOnClickListener(new Button.OnClickListener(){ //添加发送短信事件代码 @Override public void onClick(View arg0) { // 获取电话电话与短信内容 String phone=et01.getText().toString(); String message=et02.getText().toString(); if(phone.length()==0||message.length()==0){ Toast.makeText(SMSSender.this, "电话号码或短信内空不能为空!", Toast.LENGTH_LONG).show(); }else{ smsSender(phone,message); } } }); } //发送短信的方法 void smsSender(String phone,String message){ SmsManager sms = SmsManager.getDefault(); PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this,SMSSender.class), 0); //如果信息长度大于70,则把信息分为向部份发送,否则,直接发送。 if(message.length()>=70){ ArrayList<String> msgs = sms.divideMessage(message);//分割 for (String msg : msgs) { sms.sendTextMessage(phone, null, msg, pi, null);

======================================================= 制作人:wolftooth Email:dou_ding888 @ 163 . com
第 8 页 共 11 页

http://www.cmd100.com/bbs/?fromuid=3107 ===============
} }else{ sms.sendTextMessage(phone, null, message, pi, null);//具体参数含义参见 文档 } } }

4、运行测试 为了能正确测试出运行效果,需要运行两个虚拟机,一个用于发送短 信用(见下图中 5554 机器) ,另一个用于接收用(见下图中 5556 机器) 。

(1)在 5554 机器上运行短信发送程序,如下图所示:

======================================================= 制作人:wolftooth Email:dou_ding888 @ 163 . com
第 9 页 共 11 页

http://www.cmd100.com/bbs/?fromuid=3107 ===============

(2)在 5556 机器上会收到 5554 所发送的短信,如下图所示。

======================================================= 制作人:wolftooth Email:dou_ding888 @ 163 . com
第 10 页 共 11 页

http://www.cmd100.com/bbs/?fromuid=3107 ===============

三、小结 通过上面的简单实例, 演示了如何发送短信, OK, 成功了。 小结一下, 几个注意事项: 1、不要忘记注册权限。 2、发送短信类的方法的参数及含义,请仔细看文档说明。 3、程序还有小问题,在下一讲中会进行进一步调整,敬请等待。 4、源代码可以发邮件,本人奉送,邮件地址在哪里,你懂的! ======================================================= 制作人:wolftooth Email:dou_ding888 @ 163 . com
第 11 页 共 11 页


相关文章:
Android 开发之旅:短信的收发及在android模拟器之间实....doc
Android 开发之旅:短信的收发及在android模拟器之间实践(一)_IT/计算机_专业资料。Android 开发之旅: 短信的收发及在 android 模拟器之间实践 (一)...
基于Android系统平台的短信收发示例.pdf
1.1 基于 Android 系统平台的短信收发示例 1.1.1 构建示例项目 1、SMS(...>请输入手机号</string> <string name=smsMessageContent>请输入短信内容</...
基于Android的高效短信查询软件的实现+(1)_图文.pdf
Android 1 引言近年来智能手机开始普及,给众多用户的生活带来了便 都是可依据的...由于一般情况下, 最近接收发送的短信被使用到的概率相对要大,而且最近 联系人...
移动开发 之 短信收发流程.doc
流程的代码是基于 Android 5.1+Qualcomm 平 移动开发系列 之 短信的收发流程 ...短信的收发流程 本文对于手机开发人员可以熟悉短信的收发流程,快速上手去处理短信...
基于Android平台的自发短信系统设计与实现.doc
基于Android 平台的自发短信系统设计与实现 摘要: 基于 Android 手机操作系统开发...(1)好友管理模块: 显示已添加的好友信息(包括头像、 姓名、 倒计时天数及发送...
短信收发项目说明书.doc
项目开发说明书 1. 项目开发环境说明 基于 android studio 环境下 activity_main.xml 文件用于显示短信发送者号码和显 示短信内容以及 activity_send_msg.xml 文件...
Android开发学习教程Android短信的收发及android模拟....doc
Android开发学习教程Android短信的收发android模拟器实践(
基于Socket的安卓端的虚拟短信发送框架研究与实现.doc
搜试试 1 悬赏文档 全部 DOC PPT TXT PDF XLS 广告 百度文库 专业资料 IT...基于Socket 的安卓端的虚拟短信发送框架研究与实现 摘要:手机作为世界上科学进步...
黑马程序员安卓教程:案例-短信发送器.doc
个号码输入框和短信内容输入框,点击按钮的时候将该短信发送 到指定手机上...【文件 1-4】 MainActivity.java 1. package com.com.itheima.android.sms; ...
怎么用安卓手机发送多张图片?(图文详解).doc
(图文详解)_信息与通信_工程科技_专业资料。怎么用安卓手机发送多张图片?(图文
面向android手机的涉密短信监控与分析系统的设计与实现.doc
面向android手机的涉密短信监控与分析系统的设计与实现_互联网_IT/计算机_专业...功能模块介绍 如下: 2.1 短信安全监测子系统功能模块设计 1) 短信发送内容...
短信发送实验报告(java语言).doc
短信发送实验报告(java语言) - 课程设计,利用java语言设计短信发送器的论文... 安卓手机指的是用 Android 操作系统的手机...1.2 开发目的 Android 短信发送器的开发...
完美解决安卓手机不能发短信问题.doc
收短信,但 就是不出短信,小编知道肯定是短信中心号码需要设置一下,于是电...完美图解--安卓手机更换... 10页 免费 安卓手机之完美重装系统... 1页...
看了就明白 手机无法接收短信解决大全.doc
1,除去直辖市外,联通短信中心号码号,没有市级分别 2,电信 CDMA 机型...(共 3 页) Android 手机为例,如何查看/更改短信中心号码 在上述的几个情况之...
基于Android的短信加密研究与实现.pdf
基于Android的短信加密研究与实现_互联网_IT/计算机_专业资料。2012
基于Android的私密短信系统设计与实现.txt
重点阐述了系统的主要功能,短信收发流程和实现中的关键问题,本系 统通过了真机...[1]智能手机平台, 接着推出的面向 Android 应用开 发的 SDK[2]为开发者开发...
安卓手机发送多张图片教程 教您轻松发彩信.doc
安卓手机发送多张图片教程 教您轻松发彩信 1、进入短信,创建一条新信息;2、按下
分享:如何将安卓Android手机短信导入iphone5s.doc
Android 手机: 1、下载 QQ 同步助手,打开后登陆自己的 qq 账号。 2、点击右上角的“更多”按钮,进入之后选择“短信备份” ; 3、选择“备份到网络” ,根据你...
黑马程序员安卓教程:Intent激活发送系统短信页面.doc
黑马程序员安卓教程:Intent激活发送系统短信页面_计算机软件及应用_IT/计算机_专业...即在本应用中通过 Intent 跳转到手机短信应用的短信发送页面,具体步骤如下: 1....
Android短信接收过程源码分析.pdf
Android短信接收过程源码分析_信息与通信_工程科技_专业资料。Android短信接收过程...1), false); } } 这里看到,对于普通短消息,是通过 dispatchPdus()接口分发...