当设备接收到一条新的SMS消息时,就会广播一个包含了android.provider.Telephony.SMS_RECEIVED动作的Intent。注意,这个动作是一个字符串值
对于应用程序监听SMS Intent广播,首先需要添加RECEIVE_SMS权限。通过在应用程序manifest中添加一个uses-permission,如下面的片段所示:
<uses-permission android:name=”android.permission.RECEIVE_SMS”/>
很重要的必须要有,我就是没加结果纠结了老半天.....
activity中主要代码:
//生成broadcastReceiver对象
smsReceiver = new SMSReceiver();
//生成一个IntentFilter对象
IntentFilter filter = new IntentFilter();
//为IntentFilter对象添加一个action
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
//将smsReceiver对象注册到系统
TestBroadcastReceiver2Activity.this.registerReceiver(smsReceiver, filter);
在SMSReceiver中代码:
public class SMSReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
System.out.println("sms receiver");
//接收intent对象中的数据
Bundle bundle = intent.getExtras();
//在bundle对象中有个属性名key:puds 属性值是value:一个object对象数组
Object[] puObj = (Object[])bundle.get("pdus");
//创建一个SmsMessage对象的数组
SmsMessage[] messages = new SmsMessage[puObj.length];
//打印长度
System.out.println(messages.length);
for (int i = 0; i < puObj.length; i++) {
// 使用Object中的对象创建SmsMessage对象
messages[i] = SmsMessage.createFromPdu((byte[])puObj[i]);
//开始使用SmsMessage对象中的方法调用消息内容
System.out.println("content: "+messages[i].getDisplayMessageBody()+" address:"+messages[i].getDisplayOriginatingAddress());
}
}
}
千万别忘了加权限··············