普通广播:
普通广播对于任何广播的接收者来说,都是异步的,每个接收者都无需等待即可接收到广播,相互之间没有影响。这种广播无法终止,即无法阻止其他广播接收者的接收动作。
发送普通广播:
- Intent intent = new Intent("android.intent.action.MY_BROADCAST");
- intent.putExtra("msg", "Hello receiver.");
- sendBroadcast(intent);
有序广播:
有序广播会将广播优先发送给接收优先级较高的BroadcastReceiver,然后优先级高的BroadcastReceiver再传给优先级低的BroadcastReceiver,前者可以终止广播的继续传播。在优先级高的BroadcastReceiver中,还可以通过setResultExtras()方法,将一个Bundle对象设置为结果集对象,传递到下一个BroadcastReceiver那里。而低优先级的BroadcastReceiver可以通过getResultExtras()方法获取到最新的经过处理的信息集合。
优先级的设置:
通常是在AndroidManifest.xml中注册广播地址时,通过android:priority属性设置广播接收的优先级。该属性值的范围是-1000~1000,数值越大,优先级越高。如:
- <receiver android:name=".MyBroadcastReceiver">
- <intent-filter android:priority="1000">
- <action android:name="android.intent.action.MY_BROADCAST" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </receiver>
发送有序广播:
- Intent intent = new Intent("android.intent.action.MY_BROADCAST");
- intent.putExtra("msg", "Hello receiver.");
- sendOrderedBroadcast(intent, "bigben.permission.MY_BROADCAST_PERMISSION");
- <permission android:protectionLevel="normal"
- android:name="bigben.permission.MY_BROADCAST_PERMISSION" />
- <uses-permission android:name="bigben.permission.MY_BROADCAST_PERMISSION" />
终止广播:
在优先级高的BroadcastReceiver的onReceiver()方法中添加代码:
- abortBroadcast();
则广播将不会再继续往下传播,即在低优先级的BroadcastReceiver中将不会在接收到广播消息。