Android收到短信后系统会发送一个android.provider.Telephony.SMS_RECEIVED广播,
为什么bundle.get("pdus");得到的是一个数组,后来查了相关资料,pdus应该是protocol description units的简写,也就是短信们,
经过我测试后发现Android不是一接收到短信就立刻发出广播的,他会有一定的延迟,所以就有可能会有多条短信,所以才会用数组来存放,
private class TestBroadcast extends BroadcastReceiver {
private String sender;
private String content;
private String sendtime;
@Override
public void onReceive(Context context, Intent intent) {
//接收Intent对象当中的数据
Bundle bundle = intent.getExtras();
//在Bundle对象当中有个叫"pdus"的属性,这个属性的值是一个Objec数组
Object messages[] = (Object[]) bundle.get("pdus");
//创建一个SmsMessage类型的数组
SmsMessage smsMessage[] = new SmsMessage[messages.length];
for (int n = 0; n < messages.length; n++) {
//使用Object数组当中的对象创建SmsMessgae对象
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
sender = smsMessage[n].getOriginatingAddress();// 获取短信的发送者
content = smsMessage[n].getMessageBody();// 获取短信的内容
Date date = new Date(smsMessage[n].getTimestampMillis());// 获取短信的接收时间
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sendtime = format.format(date);
}
// 接收到广播消息后提示消息
Toast.makeText(context, sender + "," + content + "," + sendtime,
Toast.LENGTH_LONG).show();
}
}