广播接收者入门
什么是广播接收者
在Android系统中内置了很多系统级别的广播,例如:手机开机广播,电池电量不足广播等等。为了监听这些广播事件,Android中提供了一个BroadcastReceiver组件,该组件可以监听来自系统或应用程序的广播。当Android系统产生一个广播事件时,可以有一个或多个BroadcastReceiver接收并进行处理。
广播接收者创建与注册
广播接收者开发步骤:
1——创建一个普通类继承BroadcastReceiver,并重写onReceive()方法
2——因为BroadcastReceiver是Android四大组件之一,所以得在Android清单文件中注册
注册广播接收者有二种方式:常驻型广播和非常驻型广播
1——常驻型广播,即用XML声明
当应用程序关闭后,如果接收到其它应用程序发出的广播,那么该程序自动重新启动
2——非常驻型广播,即用Java声明(今天最后再讲--电量显示)
依赖于注册广播的组件的生命周期。例如:在Activity中注册广播接收者,当Activity销毁
后广播接收者也随之删除
Activity:onCreate()方法:
MyBroadcastReceiver receiver = new MyBroadcastReceiver();
String action=” android.provider.Telphony.SMS_RECEIVER”;
IntentFilter intentFilter = new IntentFilter(action);
registerReceiver(receiver,intentFilter);
与常驻型广播广播不同,代码有注册广播,也有删除广播。例如:在Activity的onCreate()中
注册广播,就要在onDestroy()中移除广播。
Activity:onDestroy()方法:
unregisterReceiver(receiver);
注意:广播接收者的生命周期是非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁。常驻型广播在应用程序关闭后,接收到广播会重新自动创建。非常驻型广播则依赖与注册广播组件的生命周期和调用unregisterReceiver()方法手动移除。
自定义广播
自定义广播的发送与接收
Android系统中自带了很多广播,如果需要监听某个广播,只需要创建对应的广播接收者。当这些系统级别的广播不能满足实际需求时,还可以自定义广播。
需要注意的是,自定义广播需要由对应的广播接收者去接收,否则这个广播是无意义的。
广播的类型
有序广播与无序广播
在Android系统中,根据广播的执行顺序不同,可将其分为:无序广播和有序广播。
1——无序广播
是一种完全异步执行的广播,在广播发出去之后,所有监听了这个广播的接收者几乎在同一
时刻收到广播,效率高,但无法截断
2——有序广播
是一种同步执行的广播,在广播发出去之后,同一时刻只会有一个广播接收者能够接收到这条个广播,当这个广播接收者中的onReceive()执行完毕后,广播才会继续传递,这种方式效率低,但可以截断。
有序广播发送一条消息后,高优先级的广播接收者先接收到广播,它可以截断广播,这样该广
播就不会继续传递给低优先级的广播接收者了,通过调用abortBroadcast()方法来实现。
优先级就是在android清单文件中通过android:priority=””参数配置的,范围是-1000到1000,默
认为0。如果二个广播接收者优先级相同,则先注册的广播接收者优先接收到广播。如果二个Android应用程序都监听了同一个广播,则先安装的Android应用优先接收到广播。
在实际开发中,还可能遇到这种情况,当发出了一个有序广播,然后定义多个广播接收者来接收这个广播。如果其中一个高优先级的广播接收者截断了该广播,我也希望低优先级的广播接收者也能接收到该广播,怎么办呢?代码片段:
Intent intent = new Intent();
Intent.action(“www.tlw.cn”);
MyBroadcastReceiver receiver03 = new MyBroadcastReceiver();低优先级的广播接收者
sendOrderedBroadcast(intent,null,receiver03,null,0,null,null);强行将广播发送指定的接收者
常用广播接收者
开机启动界面
常驻型广播接收者,在android清单文件中注册
注意,Android3.0以后,出现了一个安全机制,如果用户以前没启动过这个开机程序进程,
就算注册了开机启动的广播也无法接收到开机启动的广播事件,所以我们得先人工启动自定义的开机程序进程,再关机。
电量显示
非常驻型广播接收者,在Activity中Java代码注册
短信拦截器广播