Android四大组件之broadcast广播使用讲解

Android四大组件之broadcast广播使用讲解

在Android开发中,广播(Broadcast)是四大组件之一,广播是一种可以跨应用程序的组件间传递数据的机制。本文将详细讲解broadcast的使用方法及示例。

1. broadcast的定义

广播是一种可以跨应用程序的组件间传递数据的一种机制,在应用中进行发出及接收。广播可以被普通应用程序接收,所以与其它组件一样,可以在一个应用中发送广播,而能够接收它的应用也并不限于它与发送者相同的那个应用程序。

2. broadcast的使用

broadcast要涉及到两个角色,发送者和接收者,即广播的发射源以及接收源。

我们可以通过发送一个Intent对象(也就是广播信号)的方式,将需要传递的数据发送出去(由系统将数据分发给广播接收器),或者通过动态注册的方式,将自己注册为广播接收者,从而接收到系统发出的广播。

2.1 发送者

发送者需要构建一个Intent对象,设置action并添加需要传递的数据,然后通过sendBroadcast(Intent)方法将数据发送出去。如下所示:

// 发送广播
Intent intent = new Intent();
intent.setAction("com.example.broadcast");
intent.putExtra("data", "hello world");
sendBroadcast(intent);

2.2 接收者

接收者需要动态注册成为广播接收者或者在manifest文件中静态注册,然后实现onReceive()方法,接收到广播后,即可获取到发送者发送的数据。如下所示:

// 动态注册广播接收者
BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if ("com.example.broadcast".equals(intent.getAction())) {
            String data = intent.getStringExtra("data");
            Log.d(TAG, "onReceive: " + data);
        }
    }
};
IntentFilter filter = new IntentFilter("com.example.broadcast");
registerReceiver(receiver, filter);

3. broadcast的示例

3.1 系统广播示例

系统提供了很多广播动作,我们可以通过注册系统广播的方式,响应系统广播。

下面提供两个示例,第一个是监听网络状态发生变化:

public class NetworkChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 获取网络状态
        ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeInfo = connMgr.getActiveNetworkInfo();
        if (activeInfo != null && activeInfo.isConnected()) {
            Toast.makeText(context, "网络已连接", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(context, "网络已断开", Toast.LENGTH_SHORT).show();
        }
    }
}

在manifest文件中注册:

<receiver android:name=".NetworkChangeReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

第二个示例是在接收到短信时弹出一个Toast:

public class SmsReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            Object[] pdus = (Object[])bundle.get("pdus");
            StringBuilder sb = new StringBuilder();
            for (Object pdu : pdus) {
                SmsMessage message = SmsMessage.createFromPdu((byte[]) pdu);
                sb.append("短信来源: " + message.getDisplayOriginatingAddress());
                sb.append("\n短信内容: " + message.getDisplayMessageBody());
            }
            Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show();
        }
    }
}

动态注册:

BroadcastReceiver receiver = new SmsReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(receiver, filter);

以上就是broadcast的使用讲解及示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android四大组件之broadcast广播使用讲解 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Python音频操作工具PyAudio上手教程详解

    Python音频操作工具PyAudio上手教程详解 PyAudio是一个Python模块,用于音频I/O,可用于录音和播放音频数据。在本文中,我们将详细介绍如何使用PyAudio来操作音频数据。 安装PyAudio 我们可以使用pip命令来安装PyAudio模块,打开终端或命令提示符,输入以下命令: pip install pyaudio PyAudio录制…

    人工智能概览 2023年5月25日
    00
  • Java 使用Filter实现用户自动登陆

    下面是详细讲解“Java 使用Filter实现用户自动登陆”的完整攻略。 一、什么是Filter Filter是Servlet规范中的一种组件,它可以对请求和响应进行过滤处理,对于实现一些与web应用程序与业务无关的功能非常有用。例如:用户登录认证、URL访问控制、字符编码转换等等。 二、Filter工作原理 Filter工作原理是前置拦截器,即它位于请求到…

    人工智能概论 2023年5月25日
    00
  • Nmap备忘单 从探索到漏洞利用 第四章 绕过防火墙

    让我们来详细讲解第四章的“Nmap备忘单 从探索到漏洞利用”书籍中的关于绕过防火墙的完整攻略。 本章主要介绍了绕过防火墙的技术和方法,并提供了一些有效的工具和技巧,帮助用户更好地实现绕过防火墙的目的。 首先,可以利用一些常见的端口来绕过防火墙。例如,常用的HTTP协议(端口80)和HTTPS协议(端口443)通常不会被防火墙禁止,因此可以使用这些端口进行数据…

    人工智能概论 2023年5月25日
    00
  • Django之模板层的实现代码

    下面是“Django之模板层的实现代码”的完整攻略。 什么是Django模板层? Django的模板层是将用户数据和视图层之间的交互进行分离的一种方式。通过Django模板层,我们可以将页面渲染的代码分离到一个单独的文件中,从而减少代码混杂和代码冗余的问题,提高了代码的可维护性和可读性。 Django模板层如何实现 Django的模板层是由一些Python类…

    人工智能概论 2023年5月25日
    00
  • 图片文字识别(OCR)插件Ocrad.js教程

    图片文字识别(OCR)插件Ocrad.js教程 简介 Ocrad.js是一款基于Javascript的图像识别(OCR)库,可以用于识别不同类型的数字和字母的图像,包括但不限于印刷体和手写体。Ocrad.js库可以在浏览器和服务器中使用。 安装和使用 前置要求 在使用Ocrad.js之前,您需要确保您的项目中安装了Node.js和NPM包管理器。 安装 您可…

    人工智能概论 2023年5月25日
    00
  • tensorflow模型保存、加载之变量重命名实例

    下面我就来详细讲解tensorflow模型保存、加载之变量重命名实例的完整攻略。 一、tensorflow模型保存和加载 在tensorflow中,我们通常使用saver对象来保存和加载模型,saver对象是一个tensorflow中的类,用来保存变量,模型,图的实例(saver可以将变量数值作为numpy数组或TensorFlow张量对待,不用在 sess…

    人工智能概论 2023年5月25日
    00
  • node实现简单的增删改查接口实例代码

    让我们来详细讲解如何使用 Node.js 实现简单的增删改查接口,以下是完整攻略: 准备工作 在开始我们的实例代码前,需要先确保你已经完成了以下准备工作: 安装 Node.js 了解基本的 JavaScript 语法和操作 安装并掌握使用 Express 框架 新建项目并安装依赖 在你的本地环境中新建一个目录,进入该目录并初始化项目: mkdir myPro…

    人工智能概论 2023年5月24日
    00
  • pytorch Dropout过拟合的操作

    下面是关于PyTorch Dropout过拟合的操作的完整攻略: 什么是过拟合? 在机器学习领域,过拟合(overfitting)指的是我们训练好的模型在测试集上表现不佳的现象,即模型过多地学习了训练集的一些噪声和细节,导致在没有见过的数据上表现较差。这是由于过拟合的模型过于复杂,过度拟合了训练集,无法泛化到未见过的数据上。 Dropout机制 为了防止过拟…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部