天天看点

Android 两种注册、发送广播的区别一.注册广播二.发送广播

<code>BroadcastReceiver</code>广播接收者用于接收系统或其他程序(包括自己程序)发送的广播。

在android中,我们如果想接收到广播信息,必须自定义我们的广播接收者。要写一个类来继承<code>BroadcastReceiver</code>,并且重写其<code>onReceive()</code>方法,实现接收到特定广播所要做的事情。

这是一个自定义的广播接收者:

我们已经定义好了一个广播接收者。要想使用它接受到广播,就要注册这个广播接收者。

有两种方式注册广播:

步骤如下:

实例化自定义的广播接收者

实例化意图过滤器,并设置要过滤的广播类型(如,我们接收收到短信系统发出的广播)

使用Context的registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)方法注册广播

代码:

直接在<code>Manifest.xml</code>文件的<code>&lt;application&gt;</code>节点中配置广播接收者。

还要在<code>&lt;application&gt;</code>同级的位置配置可能使用到的权限

第一种不是常驻型广播,也就是说广播跟随程序的生命周期。

第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

当我们需要发送一个自定义的广播来通知程序中其他组件一些状态时,就可以使用发送一条广播的方式。

有两种方式分别发送两种不同的广播:

通过<code>mContext.sendBroadcast(Intent)</code>或<code>mContext.sendBroadcast(Intent, String)</code>发送的是无序广播(后者加了权限);

通过<code>mContext.sendOrderedBroadcast(Intent, String, BroadCastReceiver, Handler, int, String, Bundle)</code>发送的是有序广播。

区别:

无序广播:所有的接收者都会接收事件,不可以被拦截,不可以被修改。

有序广播:按照优先级,一级一级的向下传递,接收者可以修改广播数据,也可以终止广播事件。

定义一个按钮,设置其点击事件,发送一个无序广播。

定义一个广播接收者,来接收这个广播事件。通过Toast的打印判断是否收到广播

在Manifest.xml中配置该接收者。

运行结果为:Toast打印出 “收到广播”。

和无序广播使用不同的是 通过 <code>mContext.sendOrderedBroadcast(Intent, String, BroadCastReceiver, Handler, int, String, Bundle)</code>和每个接收者设置优先级,就可以在小于自己优先级的接收者得到广播前,修改或终止广播。

定义一个按钮,设置其点击事件,发送一个有序广播。

定义多个广播接收者,来接收这个广播事件。通过Toast的打印判断是否收到广播

在Manifest.xml中配置该接收者。并设置优先级:MyReceiver1&gt;MyReceiver2&gt;MyReceiver3。

运行结果:MyReceiver1得到广播数据后打印“这是初始数据”,MyReceiver2接收到广播数据打印“这是修改后的数据”,MyReceiver3没有打印。

    本文转自 一点点征服   博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/6955991.html,如需转载请自行联系原作者

继续阅读