首先定义java类继承BroadcastReceiver,然后在清单文件中定义receiver类,定义name属性,指定广播接收者java类的全类名。
在intent-filter的节点中,指定action子节点,action的值必须跟要接受的广播中的action匹配。只有当action匹配了我们才能接受这条广播,
即便广播接收者所在进程已经被关闭,当系统发出的广播中的action跟该广播接收者的action匹配时,系统会启动该广播接收者所在的进程,
并把广播发给该广播接收者。
事例代码如下:
public class MyReceiver extends BroadcastReceiver { public MyReceiver() { } @Override public void onReceive(Context context, Intent intent) { }
<receiver android:name=".MyReceiver" android:enabled="true" android:exported="true"> <intent-filter android:priority="1000"> <action android:name="" /> </intent-filter> </receiver>android:priority="1000"代表接收者的优先级。值为-1000到1000。
BroadcastReceiver中有一些方法来供我们操纵。
abortBroadcast();//阻止其他广播接收者收到这条广播你也可以通过intent.getAction()来获取接受到的广播action。
发送自定义广播
我们需要自定义一个action在intent上,然后通过
sendBroadcast()发送。代码如下:
Intent intent = new Intent();
intent.setAction("com.test.one");
sendBroadcast(intent);
记得在AndroidManifest.xml中的receiver配置action
广播的分类分为无序广播和有序广播。
无序广播:所有与广播中的action匹配的广播接收者,都可以收到这条广播,并且是没有先后顺序的,视为同时收到。
有序广播:所有与广播中的action匹配的广播接收者,都可以收到这条广播,但是有先后顺序,按照广播接收者的优先级排序。
如果要发送有序广播,则使用sendOrderedBroadcast();方法来发送。
android四大组件中除了广播接收者,其他组件必须在Manifest配置文件中
配置,而广播接收者可以在Manifest中配置,也可以在代码中注册配置。
android中有一些特殊的广播接收者必须在代码中配置,在清单文件中注册是无效的。比如:屏幕锁屏和解锁,电量改变,
代码中注册广播接收者代码如下:
MyReceiver myReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("action");
//注册
registerReceiver(myReceiver, filter);
//解除注册
unregisterReceiver(myReceiver);