发送广播,需要使用Intent,而接收广播只需要使用Broadcast Receiver,而广播分两种,一种是标准广播也就是异步广播,另一种是有序广播,也就是同步广播。
注册广播分两种,一种是代码中注册,另一种是AndroidManifest.xml中注册,也就是静态注册。
那么如何创建一个广播接收器?新建一个类,继承自BroadcastReceiver ,并且重写onReceive()方法
private IntentFilter intentfilter;
intentfilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver,intentFilter);
class NetworkChangeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context,Intent intent){
//TODO
}
}
通过IntentFilter来决定要接受哪些广播,然后一个继承BroadReceiver的类来决定收到了以后干什么.通过registerReceiver来注册这个接收器,同时也一定要在一个地方记得取消注册,比如onDestory中
同时安卓中你为了获得某些设备的信息,要添加许可申明,在AndroidManifest.xml
静态注册,在包上点击右键创建一个BroadReceiver,然后AndroidMainfest中会自动帮你生成一个receiver,在里面添加intent-filter,如下图
这样子当发出的广播被intent-filter截获到,就会调用android:name这个类的onReceive方法
发送自定义广播
发送标准广播
首先用上面得方法定义一个广播接受器,用IntentFilter配合registerReceiver方法,就可以接受,而发送广播则是
Intent intent = new Intent("xxxx");
sendBroadcast(intent);
这样子广播就被发送出去了,这样我们的广播就完成了,所有的应用都会收到
发送有序广播
只需要将sendBroadcast改为sendOrderedBroadcast,接受的顺序根据优先级决定,优先级定义如下
而因为是同步,所以可以决定是否让广播继续传播,如果不想,直接调用abortBroadcast()这个方法就好了。
本地广播
本地广播广播只会在应用本地传播,不用担心别的应用会接收到,用法
private LoccalReceiver localReceiverl; //接受器继承自BroadcastReceiver
private LocalBroadcastManager localBroadcastManager; //本地广播独有的管理器
localBroadManager = LocalBroadcastManager.getInstance(this);
Intent intent = new Intent("cxccc");
localBroadManager.sendBroadcast(intent); //发送广播
localReceiver = new LocalReciver();
intentFilter.addAction("cxccc");
locaslBroadcastManager.registerreceiver(localReceiver,intentFIlter); //接受广播
localBroadcastManager.unregisterReceiver(localReceiver);//取消注册