标签:
创建广播接收者:只需新建一个类继承自BroadcastReceiver,然后重写onReceive方法
注册广播的方式有两种:
1.静态注册:即在清单文件中注册,例如下面监听打电话的广播:
<receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver>
1.动态注册:即在代码中注册,例如:
MyBroadcastReceiver receiver = new MyBroadcastReceiver(); String action = "android.intent.action.NEW_OUTGOING_CALL"; IntentFilter intentFilter = new IntentFilter(action); registerReceiver(receiver,intentFilter);
动态注册的广播需要在onDestroy方法中解除注册
unregisterReceiver(receiver);
note:动态注册的广播依赖于注册广播的组件的生命周期
而静态注册的广播一旦注册,就一直存在
广播的类型与广播接收者在清单文件中配置的类型要一致,否则无法接收到广播
广播分为有序广播和无序广播
无序广播:通过sendBroadcast(intent)发送,不能被拦截,所有的广播接收器都可以几乎同时收到,没有先后顺序可言
有序广播:通过sendOrderedBroadcast(intent,null)发送,在广播发出后,同一时刻只有一个广播接收器可以收到,执行完毕,广播才可以继续传递
高优先级的广播接收器先接收到广播,还可以使用abortBroadcast()终止广播,
优先级可以通过android:priority=""参数来设置,范围是-1000~1000
如果两个广播接收者的优先级相同,则先注册的组件优先接收到广播
如果两个应用程序监听了同一个广播事件并设置了优先级,则先安装的应用优先接收到广播
小技巧:如果需要广播接收者无论如何都要接收到广播,不管它的优先级是最低,或者被优先级高的终止
可以调用sendOrderedBroadcast(intent,null,receiver,null,0,null,null);
第一个参数是intent,第三个参数是指定接收的广播接收者对象
标签:
原文地址:http://www.cnblogs.com/cxsy/p/5674634.html