广播主要分为两种:标准广播和有序广播。
标准广播:异步执行的 广播,广播发出后所有的广播接收器都在同一时间接收到这条广播信息。。

有序广播:同步执行的广播,广播接收器具有优先级。同时可以截断广播。

接受系统广播
注册广播的方式也有有两种:在代码中注册和在AndroidMainFest.xml文件中注册。前者为动态注册后者为静态注册。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 
 | public class MainActivity extends AppCompatActivity {private IntentFilter intentFilter;
 private NetworkChangeReceive networkChangeReceive;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 intentFilter = new IntentFilter();  //创建Intent实例
 intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");// 监听android.net.conn.CONNECTIVITY_CHANGE广播
 networkChangeReceive = new NetworkChangeReceive();
 registerReceiver(networkChangeReceive,intentFilter);// 注册广播
 }
 
 
 //动态注册的广播接收器一定要取消注册。
 @Override
 protected void onDestroy() {
 super.onDestroy();
 unregisterReceiver(networkChangeReceive);
 }
 
 class NetworkChangeReceive extends BroadcastReceiver{
 
 @Override
 public void onReceive(Context context, Intent intent) {
 ConnectivityManager systemService = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
 NetworkInfo info = systemService.getActiveNetworkInfo();  // 注意在AndroidMainfest.xml文件中注册权限信息。
 if (info != null && info.isAvailable()) {
 Toast.makeText(context, "网络可用", Toast.LENGTH_SHORT).show();
 }else {
 Toast.makeText(context, "网络不可用", Toast.LENGTH_SHORT).show();
 
 }
 }
 }
 }
 
 - 实例化自定义的广播接收器。
 
 - 创建IntentFilter实例。
 
 - 调用IntentFilter实例的addAction()方法添加监听的广播类型。
 
 - 最后调用Context的registerReceiver(BroadcastReceiver,IntentFilter)动态的注册广播。
 
 注册权限信息:
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 
 
 | 
| 1
 | <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
 | 
本地广播
全局广播很容易引起安全性问题,为了能够简单地解决广播的安全性问题,Android引入了一套本地广播机制,使用这个机制发出的广播只能在应用程序内部传递,并且广播接收器也只能接收来自本应用程序发出的广播。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 
 | /*通过点击Button发送本地广播*/public class BroadcastActivity extends AppCompatActivity {
 
 private static final String TAG = "TAG";//标签
 private LocalBroadcast localBroadcast; //本地广播
 private Button mBtStart;//Button按钮
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_broadcast);
 mBtStart = findViewById(R.id.bt_start);
 mBtStart.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 LocalBroadcastManager.getInstance(BroadcastActivity.this).sendBroadcast(new Intent("com.hbbfxy.localbroadcast"));//发送本地广播
 }
 });
 /*注册广播*/
 localBroadcast = new LocalBroadcast();
 IntentFilter intentFilter = new IntentFilter();
 intentFilter.addAction("com.hbbfxy.localbroadcast");
 LocalBroadcastManager.getInstance(this).registerReceiver(localBroadcast, intentFilter);
 
 }
 
 private class LocalBroadcast extends BroadcastReceiver{
 
 @Override
 public void onReceive(Context context, Intent intent) {
 Log.e(TAG, "onReceive: " );
 }
 }
 
 @Override
 protected void onDestroy() {
 super.onDestroy();
 LocalBroadcastManager.getInstance(this).unregisterReceiver(localBroadcast);//接触注册广播
 }
 }
 
 | 
注意在广播接收器中启动活动时需要给Intent添加FLAG_ACTIVITY_NEW_TASK标志。对话框中也需要添加TYPE_SYSTEM_ALERT否则可能会显示失败。