定义:
是一个全局监听器,属于Android四大组件之一
广播分为两个角色:广播发送者,广播接收者
广播接收器分为两种(静态注册,动态注册)
区别
使用方式:
静态注册:
在AndroidManifest.xml里通过<receive>标签里声明
由于手机8.0以后不支持静态注册所以需要加"intent.setComponent(new ComponentName(this, Receiver.class));"
动态注册:
在代码中调运Context.registerReceiver()方法
特点:
最后都要解注册(动态)
@Override
protected void onPause() {
super.onPause();
//解注册
unregisterReceiver(bigReceiver);
unregisterReceiver(netReceiveer);
unregisterReceiver(bigTwoReceiver);
unregisterReceiver(localReceiver);
}
静态注册:
①常驻,不受任何生命周期影响
②缺点:耗电,占内存
动态注册:
非常驻,灵活跟随组件的生命周期变化
应用场景:
静态注册:
需要时刻监听广播
动态注册:
需要特定时刻监听广播
广播的主要类型:
~普通广播
首先自定义一个类(继承自BroadcastReceiver)
重写onReceive方法(静态动态都是先继承然后重写onReceive方法)
(静态)
public class Receiverextends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"收到普通广播", Toast.LENGTH_SHORT).show();
Log.i("tag","收到普通广播");
}
}
(动态)
public class BigReceiverextends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"动态注册收到普通广播", Toast.LENGTH_SHORT).show();
Log.i("tag","动态注册收到普通广播");
}
}
静态注册:
XML内通过receiver标签声明
在Activity类中:
//普通广播
private void normal() {
Intent intent =new Intent("com.example.advanced8_1_activity.Receiver");
sendBroadcast(intent);
}
动态注册:
在ReSume方法中注册广播
//动态注册
@Override
protected void onResume() {
super.onResume();
//获取广播对象
bigReceiver =new BigReceiver();
//添加过滤器
IntentFilter intentFilter =new IntentFilter();
intentFilter.addAction("com.example.advanced8_1_activity.Receiver");
//注册广播
registerReceiver(bigReceiver, intentFilter);
}
在onPause方法中解注册
@Override
protected void onPause() {
super.onPause();
//解注册
unregisterReceiver(bigReceiver);
}
~系统广播
//本地广播
private void local() {
Intent intent =new Intent("com.example.advanced8_1_activity.LocalReceiver");
localBroadcastManager.sendBroadcast(intent);
}
@Override
protected void onResume() {
super.onResume();
localBroadcastManager = LocalBroadcastManager.getInstance(this);
//获取广播对象
localReceiver =new LocalReceiver();
//添加过滤器
IntentFilter intentFilter3 =new IntentFilter();
intentFilter3.addAction("com.example.advanced8_1_activity.LocalReceiver");
//注册广播
localBroadcastManager.registerReceiver(localReceiver, intentFilter3);
}
~有序广播
private void ordered() {
//有序广播
Intent intent =new Intent("com.example.advanced8_1_activity.Receiver");
sendOrderedBroadcast(intent,null);
}
protected void onResume() {
super.onResume();
//获取广播对象
netReceiveer =new NetReceiveer();
bigTwoReceiver =new BigTwoReceiver();
//添加过滤器
IntentFilter intentFilter =new IntentFilter();
intentFilter.addAction("com.example.advanced8_1_activity.Receiver");
//优先级高先收到
intentFilter.setPriority(100);
IntentFilter intentFilter2 =new IntentFilter();
intentFilter2.addAction("com.example.advanced8_1_activity.Receiver");
intentFilter2.setPriority(200);
//注册广播
registerReceiver(bigReceiver, intentFilter);
registerReceiver(bigTwoReceiver, intentFilter2);
}
~粘性广播
~App应用内广播