1 android广播机制:android中每个应用程序都可以对自己感兴趣的广播进行注册,使得只收到自己感兴趣的广播内容。
发送:即intent
接收:广播接收器
2 类型
标准广播:广播发出后所有的广播接收器在同一时间收到广播消息
有序广播:广播发出后同一时间只能有一个广播接收器收到广播,然后依次传递。
3 接收系统广播
系统广播指的是android系统自身发出的广播,可以在应用程序中写好监听这些广播的广播接收器来接收
(1)注册方法
动态注册:必须启动程序后才能接收广播
a 编写广播接收器的子类,在子类中重写onReceive方法,以处理当接收到所监听的系统广播时所应采取的方法;
b实现一个intentfilter,并指定所要监听的系统广播,然后使用registerReceiver注册
intentFilter=new IntentFilter();
intentFilter.addAction("广播类型编号");
registerReceiver(networkChangerReceiver,intentFilter);//传入的包括第一步编写的内部类的实例和intentFilter
c 取消注册:在onDestory中使用unregisterReceiver()取消注册。
静态注册:
a 编写外部类实现广播接收器
b 在AndroidManifest.xml文件中将广播接收器的类名注册。
<receiver android:name="广播接收器的名字">
<intent-filter>
<action android:name="接收的系统广播的类型编码">
</intent-filter>
</receiver>
4 发送自定义广播
(1)发送标准广播
a 先写好接收自定义广播的广播接收器:方法可以使用上述的静态方法或动态方法,注意此时广播类型编码应和后边发送时添加的类型编码一致
b 使用intent发送自定义广播
Intent intent=new Intent("com.example.broadcasttest.MY_BROADCAST");//此处的广播类型应与接收器的类型一致
sendBroadcast(intent);
(2)发送有序广播
在多个进程间传送广播,即A进程发送的广播可以让B进程的广播接收器接收到。
较之于标准广播,只需要改一处地方
sendOrderedBroadcast(intent,null);
可以针对不同进程(程序)的广播接收器在进行注册的时候增加优先级,这样每个程序收到的顺序就不一样。
5 使用本地广播
发出的广播只能够在应用程序内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播。
本地广播发送器
private LocalBroadcastManger localBroadcastManager;
localBroadcastManager=LocalBroadcastManager.getInstance(this);
本地广播接收器
private LocalReceiver localReceiver;
localBroadcastManager.registerReceiver(localReceiver,intentFilter);