广播接收器

四大组件之一广播接收器

小生第一次写博客,定期总结笔记,巩固知识点,希望能日积月累,厚积薄发。

什么是广播接收器?

就是系统的一些自身状态发生改变时会发出”广播”,
APP会像收音机一样接收到这些广播并作出处理。
例如:

  • 开机自启。当手机系统开机时使会向APP发出广播:“我开机啦”,然后APP便会自动启动。

  • wifi自动下载功能。APP门户平台都有这样一个功能:当联网方式变为wifi时,变为自动下载,为流量时,提示下载。

一. 动态注册广播接收器

基本框架

  • 定义私有变量

    private IntentFiler intentFiler;
    private MyBroadcastReceiver myBroadcastReceiver;
    
  • 初始化消息接收器、添加消息内容、注册接收器

    intentFilter = new IntentFilter();
    intentFilter.addAction("消息命名");
    myBroadcastReceiver = new MyBroadcastReceiver();
    registerReceiver(myBroadcastReceiver,intentFilter);
    
  • 定义广播接收类(继承广播接收器BroadcastReceiver)

    class MyBroadcastReceiver extends BroadcastReceiver{
    public void onReceive(Context context, Intent intent) {
     }
    }
    
  • 在onDestroy方法中小销毁注册

    protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(myBroadcastReceiver);
    }
    

二.静态注册广播监听器

关闭程序后如果接收到广播仍能重启程序

  • 清单文件

    <receiver name=".类名">
      <intent-filter android:priority="数字"> //优先级设置,数字越大优先级越高 ,标准广播可不写
         <action android:name="...."/>   //接收的行为消息
      </intent-filter>
    <receiver/>
    
  • 新建Class继承BroadcastReceiver

    public class MyBroadcastReceiver extends BroadcastReceiver{
    public void onReceive(Context context, Intent intent) {
        }
       }
    

三.发送/拦截广播

  • 发送标准广播

    Intent i = new Intent();
    i.setAction(".....")  //设置行为消息
    sendBroadcast(i);
    
  • 发送有序广播

    //第二个参数为权限设置,可定义为null
    sendOrderBroadcast(i,permision);
    
  • 拦截广播

    abortBroadcast();
    

四.使用本地广播

意旨只限本APP程序的广播发送

  • 使用LocalBroadcastManager管理广播

    private LocalBroadcastManager localBroadcastManager;
    localBroadcastManager = LocalBroadcastManager.getInstance(this);       
    localBroadcastManager.sendBroadcast(i);
    

示例:动态监听网络变化

网络连接或断开自动出现消息提示

开启WIFI时

关闭WIFI时

代码块

  • 监听网络变化方法类

     class NetworkChangeReceiver extends BroadcastReceiver{
           public void onReceive(Context arg0, Intent arg1) {
    
            ConnectivityManager  connectivityManager = (ConnectivityManager)
            getSystemService(Context.CONNECTIVITY_SERVICE);
             NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
              if(networkInfo != null && networkInfo.isAvailable()){
          Toast.makeText(arg0, "网络连接成功", Toast.LENGTH_SHORT).show();        
           }else{
          Toast.makeText(arg0, "网络断开连接",   Toast.LENGTH_SHORT).show();
      }
     }
    }
    
  • 在onCreate方法中实例化消息接收器、网络变化监听方法类并注册接收器

    intentFilter = new IntentFilter();
    //添加行为信息
    intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
    registerReceiver(networkChangeReceiver,intentFilter);
    
  • onDestoy方法中注销接收器

    protected void onDestroy(){
    super.onDestroy();
    unregisterReceiver(networkChangeReceiver);
    }
    
  • 添加(获取网络状态)权限

    android.permission.ACCESS_NETWORK_STATE
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章