BroadcastReceiver(一)--基础使用

188 阅读2分钟

这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战

一、Broadcast基础

Broadcast是Android四大组件之一,主要是在组件间通信或者进程间通信,接收系统发送的广播

广播分为标准广播和有序广播两种类型

  • 标准广播(Normal broadcast):是异步执行的广播,没有任何先后顺序,所有的广播接收器几乎都会在同一时刻接收到这条广播消息
  • 有序广播(Ordered broadcast):是同步执行的广播,是由顺序的,需要上一个广播接收器中的逻辑执行完毕后,才能继续传递,广播可以被截断

二、Broadcast使用

1. 广播注册

广播注册的方式一般有两种,静态注册和动态注册

  • 静态注册

在AndroidManifest.xml中注册称为静态注册,静态广播不需要程序启动就能收到广播

首先新建一个类,继承BroadcastReceiver

public class DemoBroadcastReceiver extends BroadcastReceiver {
 
  @Override 
  public void onReceive(Context context, Intent intent) {
     Toast.makeText(context,"DemoBroadcastReceiver",Toast.LENGTH_LONG).show();  
  }
}

在AndroidManifest.xml声明DemoBroadcastReceiver这个类

<receiver android:name=".DemoBroadcastReceiver">
    <intent-filter> 
      <action android:name="...接收的广播的Action"/>   
    </intent-filter>
</receiver>
  • 动态注册

在代码中注册称为动态注册

动态注册需要在代码中动态的指定广播地址并注册,广播会跟随程序的生命周期,所有在销毁的时候需要解除绑定

DemoBroadcastReceiver receiver = new DemoBroadcastReceiver();
        
IntentFilter filter = new IntentFilter();
filter.addAction("接收的广播的Action");
        
registerReceiver(receiver, filter);
  • 发送广播 当注册完成之后,这个接收者就可以正常工作了。我们可以向它发送一条广播
public void send(View view) {
    Intent intent = new Intent("广播的Action");
    intent.putExtra("msg", "BroadcastReceiver Demo.");
    sendBroadcast(intent);
}

三、几种常用到的BroadcastReceiver

  • 开机广播
<action android:name="android.intent.action.BOOT_COMPLETED"/>

开机广播需要添加权限

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
  • 网络状态改变
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>

对应的权限为:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  • 电量变化
<action android:name="android.intent.action.BATTERY_CHANGED"/>