Android广播机制(一)

1.基本描述

         Android 应用与 Android 系统和其他 Android 应用之间可以相互收发广播消息,这与发布-订阅设计模式相似。这些广播会在所关注的事件发生时发送。举例来说,Android 系统会在发生各种系统事件时发送广播,例如系统启动或设备开始充电时。再比如,应用可以发送自定义广播来通知其他应用它们可能感兴趣的事件(例如,一些新数据已下载)。
       应用可以注册接收特定的广播。广播发出后,系统会自动将广播传送给同意接收这种广播的应用。
       一般来说,广播可作为跨应用和普通用户流之外的消息传递系统。但是,必须小心,不要滥用在后台响应广播和运行作业的机会,因为这会导致系统变慢,具体如以下视频所述。
      广播主要分为两种:一种是标准广播,一种是有序广播。关于这两种的实例:https://blog.csdn.net/qq_35698774/article/details/106573979

1.1标准广播:

    是一种完全异步的广播,在广播发出之后,所有的广播接收器都会在同一时刻接收到这条广播, 因此他们没有任何先后顺序可言。  这种广播的效率会比较高,同时意味着他也是无法被截断的。

Android广播机制(一)_第1张图片

1.2有序广播:

  一种同步执行的广播,在广播发生之后,同一时刻同一时刻只会有一个广播接收器能够收到这条广播,当这个广播中的逻辑执行完毕后才会继续传递。所以此时的广播 * 接收器的有先后顺序的,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了。

指定优先级: *

 截断广播:abortBroadcast();

2.接收系统广播:

2.1动态注册监听广播

通过静态注册广播实现网络变化的监听。

 

完整代码:

public class NetWorkChangeActivity extends AppCompatActivity {

    private IntentFilter intentFilter;
    private NetworkChangeReceiver networkChangeReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_net_work_change);
        intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, intentFilter);
    }

    class NetworkChangeReceiver extends BroadcastReceiver {

        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public void onReceive(Context context, Intent intent) {
//            Toast.makeText(NetWorkChangeActivity.this, "networkchange", Toast.LENGTH_SHORT).show();
            //需要添加权限
            ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
            if (activeNetworkInfo != null && activeNetworkInfo.isAvailable()) {
                Toast.makeText(NetWorkChangeActivity.this, "network is available", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(NetWorkChangeActivity.this, "network is unavailable", Toast.LENGTH_SHORT).show();
            }

        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(networkChangeReceiver);
    }
}

2.2静态注册监听广播

通过静态注册的方法实现开机监听

public class BootCompleteReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        Toast.makeText(context,"开机",Toast.LENGTH_LONG).show();
        Intent i = new Intent(context, MainActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
//        throw new UnsupportedOperationException("Not yet implemented");
    }
}

清单文件


    
        
    

权限


转发表明出处:https://blog.csdn.net/qq_35698774/article/details/106572029

点击下载源码

android互助群:

感谢:郭霖的《第一行代码 第二版》

你可能感兴趣的:(广播)