标签:
为了进行系统级别的消息通知,Android引入了广播的概念。并且Android中的广播更加灵活,因为应用程序可以自己发布广播与接收广播。发送广播就需要借助Intent来发送,而接收广播则需要利用BroadcastReceiver类,通过重载onReceive方法来进行接收广播操作。
首先,接收系统广播。如何接收系统广播呢,在这有2种方式,动态和静态。
动态接收,则新建一个类继承自BroadcastReceiver并实现onReceive方法,但是,这个接收广播子类怎么知道要接收哪一个广播呢?那么就需要通过IntentFilter类添加相应的动作,然后通过Activity的registerBroadcast方法传入接收广播子类与IntentFilter对象将接收广播的动作注册到应用中。由此实现了接收广播的操作,那么接收的是何种广播则是由IntentFilter添加的动作决定。当然,如果要调用系统的功能,则需要在AndroidManifest文件中添加相应的权限。
那么何为静态接收呢?动态的接收都是需要应用程序打开后才能接收,但若我需要监听一些广播但不需要程序启动的话怎么办呢?例如监听系统开机广播,这时候就需要静态接收广播了。静态接收同样是需要新建一个子类继承BroadcastReceiver并实现onReceive方法。剩下的就交给AndroidManifest文件了,在此文件中添加receiver标签(所有广播的接收都在这),通过指定接收器的名字以及Intent-Filter标签的动作来完成广播接收。
以上描述了广播的接收,那么我们自己可不可以建立一条广播来发送呢?答案是肯定的。上面讲了发送广播是需要利用Intent的。通过在Intent中传入广播类型参数,然后调用sendBroadcast方法将广播发送出去,就完成了广播的发送。当然,广播的发送也有不同的模式,Android里就有2种广播模式:无序和有序。无序方式就如上所述,只要有监听该广播的接收器都会同时接收到该广播。但是有序的广播就有了先后次序。有序的发送广播也很简单,之需要将sendBroadcast方法换成sendOrderedBroadcast方法即可。不过此方法有2个参数,第一个仍是Intent对象,第二个则是与权限相关的字符串。
那么有的时候我们希望我们发送的广播与接收的广播都只在程序内部进行,外部与本程序的广播一点关系都没,那么怎么办呢?这就需要使用本地广播了。通过LocalBroadcastManager类,调用对应的sendBroadcast和registerBroadcast方法来发送与接收广播。(通过LocalBroadcastManager.getInstance方法来获得LocalBroadcastManager实例)。
至此,所有关于广播的内容都描述完毕。
标签:
原文地址:http://blog.csdn.net/welthy/article/details/51350554