系统广播的类型的有序广播和无序广播。
1.有序的广播。
按配置的优先级传递给广播的接收者。可以通过android:priority设置接收者的优先级。优先级从-1000~1000。
1000为最高.
2.无序的广播。接收者的接收顺序没有优先顺序。在接收到广播以后,可以abortBroadcast()终止广播的传播。
接收者需要实现BoradcastReciver,重写onRecive方法。在onRecive方法中可以通过Intent接收广播的信息。
有了广播那么就有广播的接受者,广播接收者(BroadcastReceiver)用于接收广播Intent,广播Intent的发送是通
过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()来实现的。通常一个广播Intent可以被订阅了此
Intent的多个广播接收者所接收,这个特性跟JMS中的Topic消息接收者类似。要实现一个广播接收者方法如下:
第一步:继承BroadcastReceiver,并重写onReceive()方法。
public class IncomingSMSReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
}
}
第二步:订阅感兴趣的广播Intent,订阅方法有两种:
第一种:使用代码进行订阅-可以在Activity中
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
IncomingSMSReceiver receiver = new IncomingSMSReceiver();
registerReceiver(receiver, filter);
第二种:在AndroidManifest.xml文件中的<application>节点里进行订阅:
<receiver android:name=".IncomingSMSReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
如果你想窃听别人接收到的短信,达到你不可告人的目的,那么本节内容可以实现你的需求。
当系统收到短信时,会发出一个广播Intent,Intent的action名称为android.provider.Telephony.SMS_RECEIVED,该Intent存放了系统接收到的短信内容,我们使用名称“pdus”即可从Intent中获取到短信内容
public class SmsReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
System.err.println(“收到了...”+intent.getAction()+“,”);//可以判断是否为SMS_RECEIVED
//接收到Object数组,获取到大小为1的数据类型
Object[] bs = (Object[])intent.getExtras().get("pdus");
Object pud = bs[0];
SmsMessage sms= SmsMessage.createFromPdu((byte[])pud);
String address = sms.getOriginatingAddress();
System.err.println("发信人地址:"+address);
String body = sms.getMessageBody();
System.err.println("信息体:"+body);
//如果包含一些敏感字符,则停止信息广播 – 可以对收到的信息做进一步处理
if(body.contains("sb")){
System.err.println("收到一条,阻止收信");
abortBroadcast();
}}}
在AndroidManifest.xml文件中的<application>节点里对接收到短信的广播Intent进行订阅:
<receiver android:name=".IncomingSMSReceiver">
<intent-filter><action android:name="android.provider.Telephony.SMS_RECEIVED"/></intent-filter></receiver>
在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->
<uses-permission android:name="android.permission.SEND_SMS"/><!-- 发送短信权限 -->
在Android3.1之后,建议添加一个Activity以便于通知用户安装完成。-这样才可以启动这个广播接收者。
在android2.3之前不需要这样做。只需要声明一个广播接收者即可。
773

被折叠的 条评论
为什么被折叠?



