- 无序广播
- 使用sendBroadcast方法发送
- 被所有广播接收者接收,无序,不可中断
- 广播时可设置接收者权限,仅当接收者含有权限才能接收
- 接收者的<receiver>也可设置发送方权限,只接收含有权限应用的广播
- 有序广播
- 使用sendOrderedBroadcast方法发送
- 接收者可以在<intent-filter>中定义android:priority定义优先级,数字越大优先级越高
- 被各个广播接收者逐个接收,中途可以中断或者添加数据
abortBroadcast()
getResultExtras(true).putString("data", "新增数据");
例1.无序广播
Intent intent = new Intent();
intent.setAction("wei.jiang.receiverTest");
intent.putExtra("xx", "hahah");
sendBroadcast(intent);
public class TestReceiver2 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String haha = intent.getStringExtra("xx");
System.out.println("TestReceiver1" + haha);
//abortBroadcast();
}
}
public class TestReceiver2 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String haha = intent.getStringExtra("xx");
System.out.println("TestReceiver2" + haha);
//abortBroadcast();
}
}
清单文件注册
<receiver android:name="com.example.recivertest.TestReceiver1">
<intent-filter >
<action android:name="wei.jiang.receiverTest"/>
</intent-filter>
</receiver>
<receiver android:name="com.example.recivertest.TestReceiver2">
<intent-filter >
<action android:name="wei.jiang.receiverTest"/>
</intent-filter>
</receiver>
结果:两个都接收到了广播,并打印出广播传过来的数据。
例2,有序广播
public void sendOrder(View v) {
Intent intent = new Intent();
intent.setAction("wei.jiang.receiverTest");
intent.putExtra("xx", "hahah");
sendOrderedBroadcast(intent, null);
}
在receiver1与2中加入abortBroadcast();
分别配置两个的优化级
<receiver android:name="com.example.recivertest.TestReceiver1">
<intent-filter android:priority="100">
<action android:name="wei.jiang.receiverTest"/>
</intent-filter>
</receiver>
<receiver android:name="com.example.recivertest.TestReceiver2">
<intent-filter android:priority="1000">
<action android:name="wei.jiang.receiverTest"/>
</intent-filter>
</receiver>
结果:只有receiver2能接收到消息