Broadcast

功能

广播是Android四大基本组件之一,广播功能主要分为广播和广播接收者。

广播

其中,广播按照传播方式分为:

  1. 无序广播:所有广播接收者地位相同,同时接收。
  2. 有序广播:所有广播接收者地位不同,可设置不同权限等级,等级高者优先接收广播,且可以阻断广播向下传播

广播接收器

广播接收器的注册方式分为:

1.动态注册:

  • 使用IntentFilter绑定对应的系统或者自定义的action,用于声明接收哪种广播;
  • 编写自定义类继承BroadcastReceiver并重写onReceive方法;
  • 使用registerReceiver方法传入自定义类和IntentFilter的实例
  • 使用完成后(一般在onDestroy生命周期中)使用unregisterReceiver方法取消注册

2.静态注册

  • 创建单独的类文件继承BroadcastReceiver并重写onReceive方法
  • 在清单文件中新增receive标签,并设定筛选器(即IntentFilter),还可以设置一些属性

注意(通用):

  1. onReceiver内自己实现的逻辑不要太复杂,超过5s死给你看
  2. 无论哪种广播接收器实现方式,除了自定义广播,都需要申请对应的权限

版本更迭注意点:

Android7.0:

  1. API24及以上应用,静态注册的广播接收器无法监听网络变化CONNECTIVITY_CHANGE
  2. 在Android7.0设备上,App无法发送或者接收ACTION_NEW_PICTURE和ACTION_NEW_VIDEO广播

Android8.0:

  1. Android8.0后,当App targetSDK >= 26,几乎禁止了所有的隐式广播的静态注册监听。

版本变化参考

源码

Boradcast

BroadcastReceiver

动态和静态广播接收器

1.广播先要创建出来才能接收(或者接收系统的),通过点击按钮发送一个自定义广播。这里创建一个无有序广播,如果要创建无序广播,只需要将sendBroadcast替换sendOrderedBroastcast即可。

2.注册两个静态广播接收器,一个接收我们的自定义广播,一个监听系统的网络连接的改变。

  • 自定义静态广播接收器,使用Toast显示”接收”

  • 系统网络连接监听,并使用Toast显示网络类型

3.清单文件注册

4.再创建一个应用,从外部应用使用动态广播接收信息,并在TextView打印出来