一、广播通过Intent发送出去
// 定义广播的意图过滤器 private String action = "com.xxx.demo.Broadcast.STATUS_CHANGED"; // 发送广播 Intent intent = new Intent(); intent.setAction(action); ServiceSimulation.this.sendBroadcast(intent);
二、定义接收该广播的BroadcaseReceiver类
1、继承自android.content.BroadcastReceiver;
2、必须实现其onReceive方法,并在其中完成被触发的所有动作;
public class ServiceBroadcastReceiver extends BroadcastReceiver{ /** * 本对象在接收到广播时创建,并执行onReceive方法, * 一旦onReceive方法执行完毕(return), * 本对象即被销毁(阅后即焚机制)。 * 下次接收到广播时会再次重新创建本对象,再次执行阅后即焚机制。 */ @Override public void onReceive(Context context, Intent intent) { // TODO do someing... } }
3、必须注册;
(1)在AndroidManifest.xml中注册(静态注册):
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name=".ServiceBroadcastReceiver"> <intent-filter > <action android:name="com.xxx.demo.Broadcast.STATUS_CHANGED"/> </intent-filter> </receiver> <!-- Exported receiver does not require permission --> </application>
注意:您必须确保<action>的android:name属性取值为一个全局唯一的字符串!
(2)在代码中注册(动态注册):
1、声明广播接收器
// 注册ServiceSimulation的广播接收器 ServiceBroadcastReceiver receiver;
// STATUS_CHANGED是ServiceSimulation发送广播的频道 private final static String STATUS_CHANGED = "com.xxx.demo.Broadcast.STATUS_CHANGED";
2、创建IntentFilter对象;
3、调用Context.registerReceiver()方法注册;
/** * 注册ServiceSimulation的广播接收器 */ private void registerServiceBroadcastReceiver(){ // 实例化广播接收器对象receiver,该对象为类成员变量 receiver = new ServiceBroadcastReceiver(); // 创建意图过滤器对象 IntentFilter filter = new IntentFilter(); // 为意图过滤器对象设置Action,即:广播频道 filter.addAction(STATUS_CHANGED); // 注册该广播接收器 MainActivity.this.registerReceiver(receiver, filter); }
3、调用Context.unregisterReceiver()方法注销。
/** * 注销ServiceSimulation的广播接收器 */ private void unregisterServiceBroadcastReceiver(){ // 注销广播接收器对象receiver,该对象为类成员变量 MainActivity.this.unregisterReceiver(receiver); }
三、广播的内容
调用Context.sendBroadcast(intent)发送广播时,在参数intent中包裹具体的广播内容,即可实现数据得传输。