Android-Broadcast Receiver(广播接收器)

简单记录Broadcast Receiver(广播接收器)的简单实用

1. 广播分类

1.1 Normal broadcasts 标准广播

完全异步的广播,所有的广播接收器几乎同时受到广播且无法截断。

1.2 Ordered broadcast 有序广播

显然对比与标准广播,有序广播就是有序的,可以设置各个接收器的优先级,可以被截断。

2. 注册全局广播接收器

全部广播代表,整个Android系统中的所有广播接收器都可以收到的广播

2.1 动态注册广播接收器

接受系统广播

主要步骤如下:

  1. 自定义广播接收器继承自BroadcastReceiver,并重写onReceive方法
class NetWorkReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            networkInfo = connectivityManager.getActiveNetworkInfo();//需要申请权限
            if (networkInfo != null && networkInfo.isAvailable())
                Toast.makeText(context,"网络开启了",Toast.LENGTH_SHORT).show();
            else
                Toast.makeText(context,"网络关闭了",Toast.LENGTH_SHORT).show();
        }
    }
  1. 在代码中新建一个自定义广播接收器的实例,并在Activity中注册,注册时需要传入该广播接收器所接受的广播类型。
public class MainActivity extends AppCompatActivity {
    private IntentFilter intentFilter;
    private NetworkInfo networkInfo;
    private NetWorkReceiver netWorkReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter = new IntentFilter();
        netWorkReceiver = new NetWorkReceiver();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//设置广播接收器接受的内容
        registerReceiver(netWorkReceiver,intentFilter);//注册广播接收器
    }
}
  1. 在Activity的onDestroy方法中要取消注册广播接收器。
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(netWorkReceiver);
    }

此时变设置好了一个接受系统广播的广播接收器,当数据网络开关出现变化时,会接受到相应的广播并发出Toast信息。

2.2 注册静态广播接收器

静态广播接收器还有一个特性,那就是在系统没有启动的时候就能够接受广播并对他进行处理

2.2.1 接受系统广播(开机启动)
  1. 同样自定义广播接收器继承自BroadcastReceiver,并重写onReceive方法
public class BootCompleteReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"开机了!",Toast.LENGTH_LONG).show();
    }
}
  1. 在AndroidManifest.xml文件中注册(如果使用as自动创建的则自动注册)

        
            
                

                
            
        
        //广播接收器注册
        
            
                
            
        
    
2.3 发送自定义广播并接收

自定义的广播使用静态注册

2.3.1 发送标准广播
  1. 广播接收器注册

步骤同静态广播接收器一致,不过在AndroidManifest.xml文件中不仅仅注册时,广播接收器的标签里应该填写自己自定义的广播名

......

                
            
......
  1. 发送广播-使用Intent发送:
......
Intent intent = new Intent("com.override0330.example");
sendBroadcast(intent);
......
2.3.2 发送有序广播
  1. 广播接收器注册

步骤同发送标准广播一致,但是多加入一个优先级的设置

......
//设置优先级为98,最高为100
                
            
......
  1. 发送有序广播
Intent intent = new Intent("com.override0330.example");
sendOrderBroadcast(intent, null);//null参数为一个与权限相关的字符串,一般情况传入null
  1. 截断广播

在想要截断的广播接收器的onReceive里使用

abortBroadcast();//截断该广播

3.使用本地广播

本地广播区别于全局广播,它只在本应用程序中传递,如果掌握了全局广播,那么本地广播的使用是非常简单的。而且貌似本地广播只能使用标准广播。
将上图中我们使用的注册广播接收器和发送广播的方法改为使用由LocalBroadcastManager的方法:

//获取LocalBroadManage实例
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
//发送本地广播
localBroadcastManager.sendBroadcast(intent);
//注册本地广播接收器
localBroadcastManager.registerReceiver(localBroadReceiver,intentFilter);

4. 总结

广播的使用还是相当简单的,但是它的底层实现还有待我的研究√

你可能感兴趣的:(Android-Broadcast Receiver(广播接收器))