前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android从零单排系列三十八】《Android四大组件——BroadcastReceiver》

【Android从零单排系列三十八】《Android四大组件——BroadcastReceiver》

作者头像
再见孙悟空_
发布2023-07-17 20:34:47
2620
发布2023-07-17 20:34:47
举报
文章被收录于专栏:【Android开发基础】

前言

小伙伴们,在上文中我们介绍了Android组件Service,本文我们继续盘点介绍Android开发中另一个非常重要的组件BroadcastReceiver。

一 BroadcastReceiver基本介绍

BroadcastReceiver(广播接收器)是Android中的一个组件,用于接收和响应系统或应用发送的广播消息。它允许应用程序在某些事件发生时收到通知并采取相应操作。

BroadcastReceiver通过注册到系统中指定的广播过滤器来接收广播消息。当匹配的广播消息被发送时,系统将自动调用BroadcastReceiver的onReceive()方法,并传递广播消息作为参数。开发者可以在onReceive()方法中编写自定义的逻辑来处理接收到的广播消息。

二 BroadcastReceiver使用方法

BroadcastReceiver的使用方法如下:

创建一个自定义的BroadcastReceiver类,继承自android.content.BroadcastReceiver,并重写onReceive()方法。在onReceive()方法中编写接收到广播后的逻辑代码。

代码语言:javascript
复制
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 在这里编写接收到广播后的逻辑代码
    }
}

在需要接收广播的地方注册BroadcastReceiver。可以通过两种方式进行注册:

a. 使用静态注册(在AndroidManifest.xml文件中注册):

  • 打开AndroidManifest.xml文件,找到<application>标签内部。
  • <application>标签内部添加一个<receiver>标签,并设置name属性为你自定义的BroadcastReceiver类的完整名称。
  • <receiver>标签内部添加一个或多个<intent-filter>标签,用于指定你所关心的广播消息和对应的优先级。
代码语言:javascript
复制
<receiver android:name=".MyBroadcastReceiver">
    <intent-filter>
        <!-- 设置你所关心的广播消息,例如系统启动完成 -->
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <!-- 添加其他关心的广播消息 -->
        ...
    </intent-filter>
</receiver>

b. 使用动态注册(在代码中注册):

  • 创建一个BroadcastReceiver实例,并使用registerReceiver()方法进行注册。
代码语言:javascript
复制
MyBroadcastReceiver myReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
// 添加你所关心的广播消息,例如系统启动完成
intentFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
// 添加其他关心的广播消息
...

// 注册BroadcastReceiver
context.registerReceiver(myReceiver, intentFilter);

完成注册后,在对应的事件发生时,BroadcastReceiver将接收到广播消息并调用onReceive()方法。在onReceive()方法中编写接收到广播后的逻辑代码。

注意事项:

  • 在静态注册时,请确保在AndroidManifest.xml文件中正确声明权限和过滤器。
  • 在动态注册时,需要按照相应的生命周期管理好BroadcastReceiver的注册和反注册,避免内存泄漏。
  • 如果BroadcastReceiver需要与其他组件进行通信,可以使用发送广播、启动服务等方式实现。
  • 需要注意Android 8.0及以上版本对隐式广播的

三 BroadcastReceiver常见属性及方法

roadcastReceiver是Android中常用的一个组件,以下是它的三个常见属性和方法:

  1. 属性:
  • Context:BroadcastReceiver的Context属性表示所属的上下文对象,可以通过getContext()方法获取。在接收到广播时,可以使用该属性进行相关操作,如启动服务、发送广播等。
  1. 方法:

onReceive(Context context, Intent intent):这是BroadcastReceiver必须实现的方法,用于接收到广播时处理逻辑。当广播被发送时,该方法会被自动调用。参数包括上下文Context和广播携带的Intent对象,可以通过Intent对象获取传递的数据和操作。

代码语言:javascript
复制
@Override
public void onReceive(Context context, Intent intent) {
    // 处理接收到的广播逻辑
}

abortBroadcast():该方法用于终止广播,即在该方法之后,其他具有较低优先级的广播接收者将不再接收同一条广播。

代码语言:javascript
复制
@Override
public void onReceive(Context context, Intent intent) {
    // 判断条件,如果需要终止广播
    if (condition) {
        abortBroadcast();
    }
}

setResultCode(int code) / getResultCode():这些方法用于设置或获取广播处理结果代码。在发送广播时,可以设置一个初始的结果代码,接收者在处理广播时,可以根据需要修改或获取结果代码。结果代码通常用于指示广播处理状态。

代码语言:javascript
复制
@Override
public void onReceive(Context context, Intent intent) {
    // 获取之前设置的结果代码
    int resultCode = getResultCode();
    // 根据需要修改结果代码
    setResultCode(resultCode + 1);
}

四 BroadcastReceiver简单案例

以下是一个简单的BroadcastReceiver案例,用于接收系统广播并显示Toast消息:

代码语言:javascript
复制
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // 判断接收到的广播类型
        if (intent.getAction().equals(Intent.ACTION_POWER_CONNECTED)) {
            // 插入电源时的操作
            Toast.makeText(context, "充电器已连接", Toast.LENGTH_SHORT).show();
        } else if (intent.getAction().equals(Intent.ACTION_POWER_DISCONNECTED)) {
            // 断开电源时的操作
            Toast.makeText(context, "充电器已断开", Toast.LENGTH_SHORT).show();
        }
    }
}

在AndroidManifest.xml文件中注册该BroadcastReceiver:

代码语言:javascript
复制
<receiver android:name=".MyBroadcastReceiver">
    <intent-filter>
        <!-- 接收系统的充电状态改变广播 -->
        <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
        <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
    </intent-filter>
</receiver>

以上代码示例创建了一个自定义的BroadcastReceiver类,通过判断接收到的广播类型进行相应的操作。在这个例子中,当插入或断开电源时,会分别显示对应的Toast消息。在AndroidManifest.xml文件中注册了该BroadcastReceiver,并指定了需要接收的广播类型。

五 总结

  • BroadcastReceiver用于接收系统或应用发送的广播消息。
  • BroadcastReceiver必须实现onReceive(Context context, Intent intent)方法来处理接收到的广播消息。
  • 在AndroidManifest.xml文件中注册BroadcastReceiver,或者通过代码动态注册和注销。
  • 可以通过intent-filter指定要接收的广播类型,也可以通过setAction方法设置特定的广播动作。
  • 使用registerReceiver()方法注册动态广播接收器,并使用unregisterReceiver()方法注销。
  • BroadcastRecevier可以在接收到广播后执行一些操作,如启动服务、显示通知、更新UI等。
  • 可以使用abortBroadcast()方法终止广播以阻止其传递给其他接收者。
  • 可以通过setResultCode()和getResultCode()方法设置和获取广播的结果代码。

在开发过程中要避免在BroadcastReceiver中进行耗时操作,因为它们是在主线程上执行的。如果有长时间运行的任务,建议使用IntentService或创建独立线程来处理。

BroadcastReceiver在Android开发中具有广泛的应用,例如监听网络状态变化、监听系统事件、管理通知等。它提供了一种机制,允许应用程序间的通信和交互,使得不同组件能够及时响应和处理相关的消息。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一 BroadcastReceiver基本介绍
  • 二 BroadcastReceiver使用方法
  • 三 BroadcastReceiver常见属性及方法
  • 四 BroadcastReceiver简单案例
  • 五 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档