重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Broadcast Receiver包含两部分功能: 发送和接收广播消息
按需网站建设可以根据自己的需求进行定制,成都网站制作、网站建设构思过程中功能建设理应排到主要部位公司成都网站制作、网站建设的运用实际效果公司网站制作网站建立与制做的实际意义调用sendBroadCast()方法发送广播,即发送一个Intent
发送广播只能启动广播接收器Receiver对象
接收广播Receiver,它和Activity、Service在架构上是平等的
Receiver没有界面,其生命周期非常短,在执行onReceive()方法中才有效,一旦onReceive()
方法执行完毕,该Receiver的生命期就结束,。
广播消息分为两类: 系统定义的一些广播消息和自定义广播消息
接收消息的方式:
静态接收:当程序安装时就声明其内部的广播接收器
动态接收:通过调用registerReceiver()方法向系统注册一个Receiver,动态接收多用于一个应用程序的内部
每个接收器(Receiver)内部都有一个onReceive()方法
2.广播消息的方式同步广播和异步广播
广播的分类
普通广播(Normal Broadcast):是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高。但缺点是接收者不能将处理结果传递给下一个接收者,并且无法终止Broadcast Intent的传播。
有序广播(Ordered Broadcast):该广播的接收者将按预先声明的优先级依次接收广播。有序广播接收者可以终止广播的传播(通过调用abortBroadcast()方法),广播的传播一旦终止,后面的接收者就无法接收到广播。另外,广播的接收者可以将数据传递给下一个接收者(通过setResultExtras(Bundle bundle)方法)。
3.广播实例发送广播sendBroadcast(intent)
接收广播。四大组件之一---广播接收者Broadcast Receiver。
类似于事件处理。不过事件处理是同一个程序内部,而广播的处理机制则是系统级别的(可用于不同应用程序之间)。
实现方式为:写个类继承BroadcastReceiver,覆盖方法onReceive()
在配置文件中配置
step1.写一个类继承BroadCastReceiver,重写onReceive()方法
step2.在AndroidManifest.xml中注册广播(称为静态注册)
动态注册:
@Override
protected void onStart() {
super.onStart();
receiver= new MyReceiver();
IntentFilter filter= new IntentFilter();
filter.addAction("com.anjoyo.receiver");
registerReceiver(receiver, filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
step3.发送广播
隐式通过action找到相应的receiver组件
Intent intent = new Intent("com.anjoyo.receiver");
sendBroadcast(intent);
显示通过类名找到本程序的receiver组件
Intent intent = new Intent(context,MyReceiver.class);
sendBroadcast(intent);
Receiver例子代码:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent intent2= new Intent("com.anjoyo.activity");
intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent2);
}
}
Activity配置:
同步方式发送(sendOrderBroadcastReceiver(intent))的广播,如何注册广播接收器的优先级?通过给
值越大优先级越高。
注意:
每次系统广播(Broadcast)事件发生后,系统就会创建对应的BroadcastReceiver实例,并自动触发它的onReceive()方法,onReceive()方法执行完后,BroadcastReceiver的实例就会被销毁。
如果BroadcastReceiver的onReceive()方法不能在10秒内执行完成,Android会认为该程序无响应。所以不要在广播接收者的onReceive()方法里执行一些耗时的操作,否则会弹出ANR(Application No Response)的对话框。
动态注册:
动态创建Receiver
不需要在xml文件中声明该Receiver
需要调用registerReceiver()方法向应用程序的Context注册
receiver = new MyReceiver();
IntentFilter filter= new IntentFilter();
filter.addAction("com.anjoyo.receiver");
registerReceiver(receiver, filter);
一般在程序的onPause()方法中调用unregisterReceiver()以注销Receiver对象
unregisterReceiver(receiver);
如果没有注销Receiver,那么该Receiver会一直处于接收广播消息就绪的状态,直到该程序的Context被销毁
监听系统开机广播android.intent.action.BOOT_COMPLETED(可以用来设置开机启动项)代码实现:接收到开机事件后BroadcastReceiver启动一个Activity作为响应
1.写一个类继承BroadReceiver,实现OnReceiver方法
public class MyReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Intent intent= new Intent(context,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
2.完成MainActivity
3.在AndroidManifest.xml配置
访问系统开机事件的权限: