Broadcast Receiver和其他时间处理机制类似,只不过事件处理机制是程序组件级别的,广播事件处理机制是系统级别的。
我们通过Intent来启动一个广播事件。
通过sendBroadcast()方法发送广播消息,通过继承BroadcastReceiver类,重载onReceive()方法来响应事件。
Android中定义了很多标准的Broadcast Action来响应系统广播事件,我们也可以自己定义广播事件。
以下是标准的系统广播事件:
常量名称 常量值 意义
ACTION_BOOT_COMPLETED android.intent.action.BOOT_COMPLETED 系统启动完成
ACTION_TIME_CHANGED android.intent.action.ACTION_TIME_CHANGED 事件改变
ACTION_DATE_CHANGED android.intent.action.ACTION_DATE_CHANGED 日期改变
ACTION_TIMEZONE_CHANGED android.intent.action.ACTION_TIMEZONE_CHANGED 时区改变
ACTION_BATTERY_LOW android.intent.action.ACTION_BATTERY_LOW 电量低
ACTION_MEDIA_EJECT android.intent.action.ACTION_MEDIA_EJECT 插入或拔出外部媒体
ACTION_MEDIA_BUTTON android.intent.action.ACTION_MEDIA_BUTTON 按下媒体按钮
ACTION_PACKAGE_ADDED android.intent.action.ACTION_PACKAGE_ADDED 添加包
ACTION_PACKAGE_REMOVED android.intent.action.ACTION_PACKAGE_REMOVED 删除包
Broadcast Receiver组件并没有提供可视化界面来显示广播信息
Android提供了Notification和NotificationManager来实现可视化的信息显示
通过使用他们,我们可以显示广播信息的内容、图标以及振动等信息
首先我们来说一下如何创建和接收广播,和Activity,Service一样,需要借助intent,调用sendBroadcast()来发送广播
另外,要写一个类继承BroadcastReceiver类,并重写onReceive()方法。
注意:onReceive()方法最多只能处理几秒钟的东西,如果要处理较长时间的操作(文件上传、下载等),就要用其他方法了
创建广播:
private OnClickListener listener = new OnClickListener()
{
private String SEND = "SEND_BROADCAST";
@Override
public void onClick(View v)
{
Intent intent = new Intent(); //创建intent
intent.setAction(SEND); //设置ACTION,ACTION在AndroidManifest.xml中设置
sendBroadcast(intent); //发送广播
}
};
广播接收处理:
private static final String TAG = "FirstBroadcast";
@Override
public void onReceive(Context context, Intent intent) //继承BroadcastReceiver重写的onReceive方法
{
Log.i(TAG, "Broadcast Receive");
}
上面的是静态绑定注册广播处理方法,也就是在AndroidManifest.xml中定义好ACTION,在代码中setAction,那么启动软件的时候就自动绑定注册了
还有动态绑定方法,调用registerReceiver方法启动绑定注册,调用unregisterReceiver()解除绑定注册
绑定广播演示代码:
SecondBroadcast sbBroadcast = new SecondBroadcast(); //要新建一个BroadcastReceiver类或子类对象用于绑定
IntentFilter filter = new IntentFilter(); //注意这里用的是IntentFilter
filter.addAction(FIRST); //为绑定添加ACTIONregisterReceiver(sbBroadcast, filter); //执行绑定注册广播
unregisterReceiver(sbBroadcast); //执行完代码后解除绑定注册,主要操作对象同一性
在绑定和解除绑定时候注意操作的要是同一个对象,而且绑定注册方式不用在AndroidManifest.xml中声明