Android系统内置的电台,发送一些事件:接收短信、外拨电话、电量不足、电量充满、SD插拔、软件安装与下载等。
Android应用程序中的收音机:广播接收者,指定需要接收的事件类型;
可以做一些对用户有用的业务逻辑操作。
这是一个自定义的广播接收者:
public class MyBroadCastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
//在这里可以写相应的逻辑来实现一些功能
//可以从Intent中获取数据、还可以调用BroadcastReceiver的getResultData()获取数据
}
}
广播接收者的特点:
1、即使广播接收者没有运行,当广播事件到达的时候,系统会自动启动广播接收者,并且调用onReceive方法处理消息;
2、从android4.0之后,添加了一个新特点,如果强制停止就相当于冻结了这个程序,只能等到下次手工启动后才能生效;
(一)注册广播
1.在代码中注册
//new出上边定义好的BroadcastReceiver
MyBroadCastReceiver yBroadCastReceiver = new MyBroadCastReceiver();
//实例化过滤器并设置要过滤的广播
IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
//注册广播
myContext.registerReceiver(smsBroadCastReceiver,intentFilter,
"android.permission.RECEIVE_SMS", null);
2.在Mainfest.xml中静态注册
//注册广播
<receiver android:name=".MyBroadCastReceiver">
<!-- android:priority属性是设置此接收者的优先级(从-1000到1000) -->
<intent-filter android:priority="20">
<actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
3.区别:
第一种不是常驻性广播,广播跟随程序的生命周期
第一种是常驻型,也就是程序关闭后,有信息广播来,程序也会被系统调用自动运行
(二)发送广播
1.无序广播:mContext.sendBroadcast(Intent)或mContext.sendBroadcast(Intent, String)
特点:所有的接受者都会接收事件,不可以拦截,不可以被修改
2.有序广播:mContext.sendOrderedBroadcast(Intent, String, BroadCastReceiver, Handler, int, String, Bundle)
特点:按照优先级,一级一级向下传递,接受者可以修改广播数据,也可以终止广播事件