07 |「广播接收器 」

前言

实践是最好的学习方式,技术也如此。

文章目录

    • 前言
    • 一、
    • 二、实践
      • 1、发送和接收系统广播
      • 2、发送和接收自定义广播

一、

  • 广播是 Android 系统和 Android 应用程序在发生可能影响其他应用程序组件功能的事件时发送的消息;
  • 广播是Android系统中的一种进程间通信方式,它可以用来在不同组件之间传递事件通知;
  • 进程:在Android系统中,每个运行的应用程序都会以一个进程(Process)的形式存在;
  • 进程可以理解为一个应用程序的运行实例,它拥有自己独立的资源和内存空间。进程是Android系统进行资源分配和调度的基本单位。
  • 其他应用如果注册了相应的广播接收器(Broadcast Receiver),就可以在收到广播时得到通知,进而做出响应。比如音乐App在耳机拔出时会接收到广播,然后暂停正在播放的音乐。
  • 系统广播:系统广播是Android框架在某些系统事件发生时自动发送出去的广播;系统事件比如开机启动、网络状态变化、电量变化等
  • 自定义广播:除了接收和响应系统级广播事件以外,Android应用也可以自己发送自定义的广播事件,以通知其他组件或应用。例如,一个新闻App在下载完最新新闻后,可以发送一个"com.news.NEW_NEWS_DOWNLOADED"的广播。其他感兴趣的App如果注册了这个广播,就可以在接收到该广播时作出响应,比如去拉取并显示这些最新新闻。所以自定义广播可以像系统广播一样,提供一种应用或组件之间相互通信的方式。
  • 广播机制:当一个广播事件被发送出去后,系统会将这条广播传递给所有注册了对应的广播接收器(BroadcastReceiver)的应用或组件。
  • BroadcastReceiver 基类
    • BroadcastReceiver是一个抽象类,用于接收和处理广播;
    • 开发者需要自定义一个BroadcastReceiver的子类来实现广播接收逻辑;
    • 在BroadcastReceiver子类中主要需要实现onReceive()方法,当收到广播时系统会回调此方法;
    • onReceive()中可以根据Intent的内容进行处理,如读取数据、启动服务

二、实践

1、发送和接收系统广播

  • 创建一个应用程序来响应设备充电状态的变化;
  • 在设备连接或断开电源时显示一条 Toast 消息。该应用程序还将发送和接收自定义广播以显示不同的 toast 消息;
  • Intent
    • 作用:Intent是Android程序各组件之间进行交互和通信的重要方式;通过组合不同的Action和Data,Intent可以描述出要执行的不同任务
    • 使用
      • 参数:Intent主要包含以下两个部分
        • Action:意图动作,Intent要完成的动作,如启动Activity,启动Service等;
        • Data:携带的数据,可以是uri地址,也可以是额外的信息;
      • 解析Intent的内容来启动不同的组件,完成相应的工作
  • 系统广播是Android系统在系统事件发生时发送的消息。每个系统广播都包装在一个 Intent 对象中:系统事件发生时,系统会生成一个对应的Intent对象,用来封装这个系统事件的广播信息,然后系统会把这个Intent对象发送出去,作为系统广播;应用程序可以通过在清单文件中注册BroadcastReceiver,并过滤对应的系统广播Action来接收这个Intent。

一旦接收到,就可以从Intent中解析出系统事件的详细信息。

  • 两个系统广播

    • ACTION_POWER_CONNECTED:表示电源被断开,设备已脱离供电;这个action的Intent会在电源断开时由系统广播出去
    • ACTION_POWER_DISCONNECTED:表示电源被连接,设备已连接到供电;会在连接电源时由系统广播这个action的Intent
  • 静态注册:在AndroidManifest.xml里声明,并通过指定接收的广播action

  • 动态注册:在代码中通过Context.registerReceiver()来注册,同样可以指定IntentFilter来过滤广播

  • Intent Filter:类似一个过滤网,只留下特定类型的Intent

    • 是一种过滤机制,它用于指定某个组件能够接收什么类型的Intent
    • Action:Intent的动作,Data:数据URI,Category:分类信息
    • 当一个Activity声明了某个Intent Filter时,只有匹配这个Filter的Intent才能启动这个Activity。Intent Filter通过配置Intent中的action、data、category等信息,来过滤掉不匹配的Intent,只让特定的Intent可以传递到该组件。
      • 当系统发出或接收到一个广播Intent时,会遍历所有已注册的广播接收器(BroadcastReceiver),判断其IntentFilter是否与当前Intent匹配。

      • 匹配的判断规则是:

        • Action相同
        • Category相同
        • Data schemes或类型相同
        • 如果一个接收器的IntentFilter与当前Intent同时匹配上这3项,就认为它可以接收这个广播。
        • 例如,IntentFilter指定了"android.intent.action.BOOT_COMPLETED"的Action,当系统启动完成的Intent被广播时,这个接收器就能收到。

2、发送和接收自定义广播

  • 除了响应系统广播之外,您的应用程序还可以发送和接收自定义广播;如当您希望应用程序在不启动 Activity 的情况下执行操作;

  • Android 为您的应用提供了三种发送自定义广播的方式

    • 普通广播:普通广播适合那些不依赖调用顺序,所有接收器可以并发处理的场景
    • 本地广播:本地广播只会在应用内部传递,不会像普通广播那样系统级别传播(所以本地广播适用于应用内组件间的通信,是一种更轻量级的内部广播方式)
    • 有序广播:有序广播允许接收器按顺序步骤处理,并传递数据或截断
  • 任务:您将向 Activity 添加一个发送本地广播意图的按钮。您的接收器注册广播 Intent 并在 Toast 消息中显示结果;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/31073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS( 任务与中断优先级,临界保护)

资料来源于硬件家园:资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、中断优先级 1、NVIC基础知识 2、FreeRTOS配置NVIC 3、SVC、PendSV、Systick中断 4、不受FreeRTOS管理的中断 5、STM32CubeMX配置 二、任务优先级 1、任务优先级说明 2、任务…

【LeetCode】144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

作者:小卢 专栏:《Leetcode》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 144. 二叉树的前序遍历 144. 二叉树的前序遍历 题目: 给你二叉树的根节点 root &…

保姆级Arcgis安装图文安装教程

参考视频:【钟老师arcGIS从放弃到入门】02软件下载与安装_哔哩哔哩_bilibili 安装包在视频简介中有 注释:安装过程中有犯错误,请耐心看完一遍再跟着操作 (一)安装包下载 下载视频中分享的压缩包(压缩包密码&#x…

window下部署Yapi接口管理系统部署总结

window下部署Yapi接口管理系统部署总结 YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平…

后端开发8.品牌模块

概述 简介 效果图 数据库设计 DROP TABLE IF EXISTS `goods_brand`;CREATE TABLE `goods_brand` ( `goodsBrandId` int(11) NOT NULL AUTO_IN

04-4_Qt 5.9 C++开发指南_时间日期与定时器

文章目录 1. 时间日期相关的类2. 源码2.1 可视化UI设计2.2 dialog.h2.3 dialog.cpp 1. 时间日期相关的类 时间日期是经常遇到的数据类型,Qt 中时间日期类型的类如下。 QTime:时间数据类型,仅表示时间,如 15:23:13。 QDate:日期数据类型&…

【资料分享】全志科技T507-H工业核心板规格书

1 核心板简介 创龙科技SOM-TLT507是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53全国产工业核心板,主频高达1.416GHz。核心板CPU、ROM、RAM、电源、晶振等所有元器件均采用国产工业级方案,国产化率100%。 核心板通过邮票孔连接方式引出MIPI C…

TCP通信——多线程并发回环服务器

思路 首先要考虑到服务器的流程,TCP服务器端程序流程: socketbind绑定listen监听accept等待连接 多线程并发服务器需要通过多个线程实现与多个客户端的连接,当每次有一个客户端连接来时,创建一个线程,用于与客户端的…

C语言判断文件是否存在之stat、fopen、access

一、stat 头文件 sys/stat.h unistd.h 函数原型 结构体struct stat说明 struct stat {dev_t st_dev; //device 文件的设备编号ino_t st_ino; //inode 文件的i-nodemode_t st_mode; //protection 文件的类型和存取的权限nlink_t st_nlink; //number of hard links 连到该文件…

ol问题总结二

一、加载坐标系是4326格式的&#xff0c;使用wfsServer发布的服务&#xff0c;图层加载失败&#xff1b;坐标系是3857格式的。图层加载正常 原因&#xff1a;4326格式的&#xff0c;发布出来的&#xff0c;经纬度是颠倒的 解决方案一&#xff1a;将经纬度进行反转 <templa…

QGIS开发五:使用UI文件

前面我们说了在创建项目时创建的是一个空项目&#xff0c;即不使用 Qt 提供的综合开发套件 Qt Creator&#xff0c;也不使用 Qt Visual Studio Tools 这类工具。 但是后面发现&#xff0c;如果我想要有更加满意的界面布局&#xff0c;还是要自己写一个UI文件&#xff0c;如果不…

深度对话|如何设计合适的网络经济激励措施

近日&#xff0c;我们与Mysten Labs的首席经济学家Alonso de Gortari进行了对话&#xff0c;讨论了如何在网络运营商和参与者之间找到激励措施的平衡&#xff0c;以及Sui的经济如何不断发展。 是什么让您选择将自己的经济学背景应用于区块链和Web3领域&#xff1f; 起初&…

微信个人小程序申请 (AppID 和 AppSecret)

1. 登录微信公众平台 https://mp.weixin.qq.com/cgi-bin/loginpage?url%2Fcgi-bin%2Fhome%3Ft%3Dhome%2Findex%26lang%3Dzh_CN%26token%3D47421820 2. 右上角立即注册 3. 注册类型选择小程序 4. 账号信息 5. 邮箱激活 6. 小程序发布流程 7. 小程序信息 (前往填写) 8. 获取小程…

【一】初步认识数据库

数据库概览数据库 缘起表(Table)的理解用表来定义数据库数据库系统的理解概念层次的理解实例层次的理解 数据库管理系统的理解从用户角度看从系统实现角度看典型的数据库管理系统 数据库语言数据库定义、操纵、控制语言数据库语言 VS 高级语言 内容回顾练习 数据库概览 走马观…

QT笔记——QT自定义事件

我们有时候想发送自定义事件 1&#xff1a;创建自定义事件&#xff0c;首先我们需要知道它的条件 1&#xff1a;自定义事件需要继承QEvent 2&#xff1a;事件的类型需要在 QEvent::User 和 QEvent::MaxUser 范围之间&#xff0c;在QEvent::User之前 是预留给系统的事件 3&#…

【PostgreSQL】几个提高性能的小特性

一、LOCALE 与 “operator class” 在PostgreSQL里&#xff0c;LOCALE默认使用C的本地化规则。LOCALE是一种文化偏好的区域设置&#xff0c;包括字母表、排序、数字格式等。 LOCALE里有一个比较重要的规则LC_COLLATE&#xff0c;即排序方式(Collation)&#xff0c;它会对数据…

前端先行模拟接口(mock+expres+json)

目录 mock模拟数据&#xff1a;data/static.js 路由&#xff1a;index.js 服务器&#xff1a;server.js yarn /node 启动服务器&#xff1a;yarn start 客户端&#xff1a;修改代理路径(修改设置后都要重启才生效) 示例 后端框架express构建服务器 前端发起请求 静态数…

smtplib.SMTPHeloError: (500, b‘Error: bad syntax‘)

如果你编写邮件收发工具的时候,有可能会遇到这个问题。这里直接给出解决办法。 目录 1、检查系统版本 2、点击右侧的更改适配器选项

0基础学C#笔记08:插入排序法

文章目录 前言一、过程简单描述&#xff1a;二、代码总结 前言 我们在玩打牌的时候&#xff0c;你是怎么整理那些牌的呢&#xff1f;一种简单的方法就是一张一张的来&#xff0c;将每一张牌插入到其他已经有序的牌中的适当位置。当我们给无序数组做排序的时候&#xff0c;为了…

十九、docker学习-Dockerfile

Dockerfile 官网地址 https://docs.docker.com/engine/reference/builder/Dockerfile其实就是我们用来构建Docker镜像的源码&#xff0c;当然这不是所谓的编程源码&#xff0c;而是一些命令的集合&#xff0c;只要理解它的逻辑和语法格式&#xff0c;就可以很容易的编写Docke…