Android框架中的广播机制

一、广播通过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中包裹具体的广播内容,即可实现数据得传输。
原文地址:https://www.cnblogs.com/godwithus/p/5530473.html