Android框架中的广播机制

时间:2022-05-06 07:29:16

一、广播通过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中包裹具体的广播内容,即可实现数据得传输。