内容接着Android-BoadcastReceiver广播接收者1的帖子。
二、自定义广播的,建立BroadcastReceiver来接收广播,应用举例
例1、发送一条无序广播给所有关注者
步骤1、建立一个发送广播的工程,按钮事件监听方法如下:
public void send(View view){
Intent intent = new Intent();
intent.setAction("com.gdkm.rjjs"); //广播的订阅标志
intent.putExtra("msg", "来自SendBroadCast的广播消息");
//广播携带的消息,可以是任意类型
this.sendBroadcast(intent);
}
步骤2、建立一个接受广播的工程TestBroadcastReceiver1,里面可以没有Activity界面,在新建的时候取消掉自动创建Activity和图标的勾。
建立一个MyReceiver1 extends BroadcastReceiver
public class MyReceiver1 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// 广播接受者的业务方法,广播发生时,自动调用
Log.i("MyReceiver1", intent.getStringExtra("msg"));
Toast.makeText(context, intent.getStringExtra("msg"), 2).show();
}
}
<receiver android:name="com.gdkm.receiver.MyReceiver1">
<intent-filter>
<action android:name="com.gdkm.rjjs"></action>
</intent-filter>
</receiver>
</application>
发布两个工程,点击按钮,广播接受者就自动接收到广播消息作出相应的处理。
例2、发送一条有序广播,依次由两个程序接收,程序1先处理广播信息,并且进行数据的处理,再由程序2接收广播。
步骤1、建立一个发送广播的工程,按钮事件监听方法如下:
public void send(View view){
Intent intent = new Intent();
intent.setAction("com.gdkm.rjjs");
intent.putExtra("msg", "来自SendBroadCast的广播消息");
this.sendOrderedBroadcast(intent, null);
}
步骤2、建立第一个广播接受者,设置优先级
public class MyReceiver1 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.i("MyReceiver1", intent.getStringExtra("msg"));
//this.abortBroadcast(); //取消广播的继续发送
//附加消息到广播上
Bundle bundle = new Bundle();
bundle.putString("receiver1", "第一个接受者附加的数据");
this.setResultExtras(bundle);
Toast.makeText(context, intent.getStringExtra("msg"), 2).show();
}
}
<receiver android:name="com.gdkm.receiver.MyReceiver1">
<intent-filter android:priority="2">
<action android:name="com.gdkm.rjjs"></action>
</intent-filter>
</receiver>
</application>
步骤3、再建立一个广播接受者,优先级为1,后收到广播,并且去除前一个广播附加的数据
public class MyReceiver2 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.i("MyReceiver2", intent.getStringExtra("msg"));
Bundle bundle = this.getResultExtras(true);
String text =bundle.getString("receiver1");
Log.i("MyReceiver2", text);
}
}
<receiver android:name="com.gdkm.receiver.MyReceiver2">
<intent-filter android:priority="1">
<action android:name="com.gdkm.rjjs"></action>
</intent-filter>
</receiver>
</application>
步骤4、可以在第一个广播接收者onReceive方法中取消这个广播的继续发送,调用:
this.abortBroadcast(); //取消广播的继续发送
有序广播的实际应用:系统来电、来短信就是一个有序广播,编写短信监听程序,黑名单过滤电话,就是编写一个优先级最高的广播接收者,在程序中结束掉来电的广播,起到拦截电话的作用。 |
|