BroadcastReceiver(广播接收者)

BroadcastReceiver是Android系统的核心组件。java

广播是一种通讯机制,广播的发送方能够发出广播,而另外一端可使用接收者接收该广播,接收到了之后决定相应的处理。app

发广播可使用sendBroadcast(Intent intent)方法实现,该方法是由ContextWrapper定义的。ide

在发送广播时,须要在Intent对象中配置Action属性,相似于生活中的广播的“频道号”spa

广播的接收须要自定义类继承BroadcastReceiver来实现,该自定义类能够是内部类。code

注册广播接收者能够在程序代码中进行注册,调用registerReceiver(BroadcastReceiver recevier, IntentFilter filter)便可实现注册,注册时,参数IntentFilter中应该经过addAction()方法添加全部须要接收的广播中Intent携带的Action属性。xml

发送广播:对象

Intent it = new Intent();
it.setAction("cn.tedu.player.intent.action.PREVIOUS");
sendBroadcast(it);

接收广播:
排序

private class InnerBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if("cn.tedu.player.intent.action.PLAY".equals(action)) {
            // PLAY
            Log.d("media store", "PlayMusicService$InnerBroadcastReceiver.onReceive() -> PLAY");
        } else if("cn.tedu.player.intent.action.PREVIOUS".equals(action)) {
            // PREVIOUS
            Log.d("media store", "PlayMusicService$InnerBroadcastReceiver.onReceive() -> PREVIOUS");
        }
    }
}

发广播:sendBroadcast(Intent intent)继承

收广播:继承BroadcastReceiver并注册,重写onReceive(Context context, Intent intent)方法get

【广播的类型】

1) 普通广播:广而播之,经过sendBroadcast()发送广播

2) 有序广播:传话,经过sendOrderedBroadcast()发送广播,在广播传递的过程当中,任何一个接收者均可以调用abortBroadcast()方法以终止广播的传递,而且能够经过setResultXXX()系列方法封装数据,后续的广播接收者则能够经过getResultXXX(0方法获取数据。

【有序广播的接收者们的优先级】

1. 有序广播的接收者们能够在匹配的IntentFilter中配置priority属性,表示优先级,取值为int类型的数值,数值越大,则优先级越高,就会更优先收到广播,反之,数值越小,优先级越低,就更后收到广播

2. 当priority属性的值相同时,若是注册方式不一样,则动态注册的广播接收者优先级更高,静态注册的广播接收者优先级更低

3. 当priority属性的值相同时,而且注册方式也相同时,按照注册的前后顺序来区分,即根据registerReceiver()方法的调用顺序,或在AndroidManifest.xml文件中<receiver>节点的顺序来排列,越靠前的优先级越高。若是不一样的应用程序都使用静态注册的广播接收者,且优先级相同时,按照应用程序的包名按照字典排序法排序。

【广播注册】

1) 动态注册:在类中使用registerReceiver(BroadcastReceiver receiver, IntentFilter filter)注册,并在类被销毁以前使用unregisterReceiver(BroadcastReceiver receiver)取消注册。

2) 静态注册:在AndroidManifest.xml文件中注册。

【注册方式的区别】

1) 之内部类形式存在的广播接收者只能使用动态注册,而通常的广播接收者类可使用任何一种方式进行注册

2) 动态注册是临时的,静态注册是常驻的。

eg:

注册广播托收者

// 注册广播接收者
receiver = new InnerBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_SHOW_PLAY);
filter.addAction(ACTION_SHOW_PAUSE);
registerReceiver(receiver, filter);
相关文章
相关标签/搜索