手机发展到2G阶段,出现了短信功能,现在已经成为除了通话业务之外最大的通信业务。本文我们通过一个例子来实现短信文本的发送功能。
一、关于模拟器
由于我们用模拟器进行实验,不能接收实际的呼叫和短信。但是模拟器的功能还是很强大滴……
在模拟器运行时,窗口左上角有当前模拟器的ID,如:5554
这个id可以被理解成手机号码,我们可以用这个号码来测试自带的通话和短信功能。另外在后台还可以使用命令行来实现短信发送和呼叫。手机号码为:15555218135。
1.运行 cmd
2.连接: telnet localhost 5554
3.通话命令:gsm call 15555218135
4.短信命令:sms send 15555218135 Hello,this is a Message.
二、界面设计
绘制如下界面:
三、代码编写
为了实现通信功能,我们需要引入代码包:import android.telephony.gsm.SmsManager;
在按钮的响应中添加:
1.在这个程序中,我们用到了sendTextMessage函数,从sdk中查到:
public void sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)
destinationAddress 收件人地址
scAddress 短信中心号码,空为默认中心号码
sentIntent 当消息发出时,成功或者失败的信息报告通过PendingIntent来广播。如果该参数为空,则发信程序会被所有位置程序检查一遍,这样会导致发送时间延长。
deliveryIntent 当消息发送到收件人时,该PendingIntent会被广播。pdu数据在状态报告的extended data ("pdu")中。
抛出 IllegalArgumentException 如果收件人或者信息为空。
2.
public static PendingIntent getBroadcast (Context context, int requestCode, Intent intent, int flags)
返回一个用于广播的PendingIntent,类似于调用Context.sendBroadcast()函数
requestCode 暂时不用
intent 是用于广播的intent
flag 有:FLAG_ONE_SHOT, FLAG_NO_CREATE, FLAG_CANCEL_CURRENT, FLAG_UPDATE_CURRENT 用于设置新建的PendingIntent是使用一次、如无则不创建、取消当前、更新当前等属性。
四、运行结果
运行两个模拟器,启动时间比较慢。
输入其中一个的ID如5556,和文本消息abc。点击发送后,在另外一个模拟器中出现发送的消息。