自制发送短信程序
SmsManager与PendingIntent对象
范例说明
前面的范例,示范了如何通过程序来拨打电话,在GSM移动通信系统的服务中,除了拨打电话外,另一个常用的功能,就是发送短信。也因为如此,许多电信业者推出许多专属于短信族的专用费率,由此可知短信功能对手机的重要性。
在这个范例中,通过自定义两个EditText控件,分别取得收件人电话与短信的正文,并判断收件人电话格式是否正确,以及正文输入的文字字数(GSM的规范为70个Unicode16文字为1则)是否超过一则短信的限制,若超过一则短信的字数,或电话号码格式不符,则利用Toast来告诉用户,若无任何错误,则取得EdiText控件里的输入值,并将输入的内容当作短信发送,完成自制发送短信程序。
发送短信的关键程序是通过SmsManager对象的sendTextMessage()方法来完成,其中sendTextMessage()方法需传入5个值,依次是收件人地址(String)、发送地址(String)、正文(String)、发送服务(PendingIntent)与送达服务(PendingIntent),其中收件人与正文是不可为Null的两个参数。
<!--[endif]-->
▲ 图5-3 在EditText中输入电话与短信内容,送出后,Toast会发送成功或相关格式错误的信息
范例程序
src/irdc.ex05_03/EX05_03.java
主程序除了在onCreat()中创建两个EditText控件与一个Button控件外,分别设置onClickLinstener()让用户单击EditText控件时,同时清除内容,在单击Button时送出短信,并通过isPhoneNumberValid()与iswithin70()这两个自定义的方法来检查收件人电话号码的正则表达式,以及短信正文的字数是否超过70个字符。
在两项检查同时通过的前提下,通过PendingIntent.getBroadcast()的方法自定义PendingIntent并进行Broadcasting,而后使用SmsManager.getDefault()(当处理SMS 短信相关的活动,例如发送数据、文字与pdu SMS信息,都需要调用这种静态的方法)所预先构建的SmsManager使用sendTextMessage()方法,将相关数据以参数带入,即可完成发送短信的任务。
AndroidManifest.xml
请注意,需要添加发送短信的权限android.permission.SEND_SMS。
<uses-permission android:name="android.permission.SEND_SMS">
扩展学习
本范例使用到的PendingIntent对象,具有下列的特性:当接收到PendingIntent对象时,会进行broadcast的动作,就如同使用Context.sendBroadcast()方法一样,这也就是为什么在SmsManager.sendTextMessage()方法中需要传入PendingIntent作为传送服务的参数之一。
在主程序中使用发送短信的方式,只展示了SmsManager类中,可使用的3种传送短信的方法之一,而完整的3种可用方法,整理如表5-1所示。
表5-1 SmsManager类中可使用的3种方法
方 法 名 称
|
传 入 参 数
|
使 用 时 机
|
sendDataMessage
|
String destinationAddress, String scAddress, short destin- ationPort, byte[] data, PendingIntent sentIntent, Pending Intent deliveryIntent
|
发送Data格式的SMS传送到特定程序的Port
|
sendMultipartTextMessage
|
String destinationAddress, String scAddress, ArrayList <String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents
|
发送多条文字短信
|
sendTextMessage
|
String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent
|
发送文字短信
|
另外,本范例并没有实现接收sms的部分,仅发出短信,由于单纯通过运行程序的模拟器,将无法了解短信是否真的有送出,而收件人是否真的有收到。因此,在程序开发的过程中,读者可以通过下面的小技巧来打开两个模拟器,一个进行传送,另一个进行收件的模拟测试。
步骤一:先进入Eclipse,compile运行程序,并顺利开始第一个模拟器实例(Instance)。
步骤二:打开DOS窗口(cmd),并输入命令,进入文件夹:
D:/>cd D:/SDK/android/tools/
步骤三:输入shell command,其中foo为AVD的名称。
D:/SDK/android/tools>emulator -data foo
此时,窗口会跳出另一个模拟器,通过输入左上方的InstanceID(例:5546)作为收件人的电话号码,即可测试短信送达的状态。
最后提到了拆分短信,此范例中虽然自制了简单的判断字符串字符数,却只能接受单则的短信,事实上,在SmsManager里尚有一个公有方法:
public ArrayList<String> divideMessage (String text)
分享到:
相关推荐
android 自制发送短信程序 SmsManager与PendingIntent对象
import android.app.Activity; /*必需引用PendingIntent类才能使用getBrocast()*/ import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; /*必需引用telephony.gsm....
自制发送短信程序--SmsManager与PendingIntent类的使用
5.3 自制发送短信程序 183 5.4 自制发送e-mail程序 187 5.5 自制日历手机数据库 190 5.6 手机振动的节奏 195 5.7 图文可视化提醒 198 5.8 状态栏的图标与文字提醒 200 5.9 搜索手机通讯录自动...
5.3 自制发送短信程序 5.4 自制发送E-mail程序 5.5 自制日历手机数据库 5.6 手机振动的节奏 5.7 图文可视化提醒 5.8 状态栏的图标与文字提醒 5.9 搜索手机通讯录自动完成 5.10 取得联系人资料 5.11 制作有图标的文件...
5.3 自制发送短信程序 5.4 自制发送E-mail程序 5.5 自制日历手机数据库 5.6 手机振动的节奏 5.7 图文可视化提醒 5.8 状态栏的图标与文字提醒 5.9 搜索手机通讯录自动完成 5.10 取得联系人资料 5.11 制作有图标的文件...
5.3 自制发送短信程序 5.4 自制发送E-mail程序 5.5 自制日历手机数据库 5.6 手机振动的节奏 5.7 图文可视化提醒 5.8 状态栏的图标与文字提醒 5.9 搜索手机通讯录自动完成 5.10 取得联系人资料 5.11 制作有图标的文件...
5.3 自制发送短信程序 5.4 自制发送E-mail程序 5.5 自制日历手机数据库 5.6 手机振动的节奏 5.7 图文可视化提醒 5.8 状态栏的图标与文字提醒 5.9 搜索手机通讯录自动完成 5.10 取得联系人资料 5.11 制作有图标的文件...
5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送Email程序——Intent在Email上的使用 5.5 自制日历手机数据库——实现SQLiteOpenHelper 5.6 手机震动的节奏——Vibrator对象及周期运用 5.7 ...
5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送Email程序——Intent在Email上的使用 5.5 自制日历手机数据库——实现SQLiteOpenHelper 5.6 手机震动的节奏——Vibrator对象及周期运用 5.7 ...
5.3 短信发送程序 5.4 e-mail发送程序 5.5 实现手机震动效果 5.6 图文提醒效果 5.7 状态栏提醒 5.8 检索通讯录 5.8.1 实现原理 5.8.2 contentprovider介绍 5.8.3 具体实现 5.9 文件管理 5.10 还原手机桌面 5.11 置换...
5.3 自制发送短信程序 5.4 自制发送E-mail程序 5.5 自制日历手机数据库 5.6 手机振动的节奏 5.7 图文可视化提醒 5.8 状态栏的图标与文字提醒 5.9 搜索手机通讯录自动完成 5.10 取得联系人...
5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送Email程序——Intent在Email上的使用 5.5 自制日历手机数据库——实现SQLiteOpenHelper 5.6 手机震动的节奏——Vibrator对象及周期运用 5.7 ...
5.3 自制发送短信程序——SmsManager与PendingIntent对象 -p160 5.4 自制发送Email程序——Intent在Email上的使用-p165 5.5 自制日历手机数据库——实现SQLiteOpenHelper 5.6 手机震动的节奏——Vibrator对象及周期...
5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送Email程序——Intent在Email上的使用 5.5 自制日历手机数据库——实现SQLiteOpenHelper 5.6 手机震动的节奏——Vibrator对象及周期运用 5.7...
5.3 自制发送短信程序 5.4 自制发送E-mail程序 5.5 自制日历手机数据库 5.6 手机震动的节奏 5.7 图文可视化提醒 5.8 状态栏的图标与文字提醒 5.9 搜索手机通讯录自动完成 ...
5.3 自制发送短信程序——SmsManager与PendingIntent对象 -p160 5.4 自制发送Email程序——Intent在Email上的使用-p165 5.5 自制日历手机数据库——实现SQLiteOpenHelper 5.6 手机震动的节奏——Vibrator对象及周期...