Android14之调试广播实例(二百二十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门实战课原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2.Android14之BroadCast介绍
    • 🌻3.代码实例
      • 🐓3.1 发送广播
      • 🐓3.2 接收广播
      • 🐓3.3 配置广播

🌻1.前言

本篇目的:Android14之广播发送实例

🌻2.Android14之BroadCast介绍

  • Android广播机制是一种系统范围内的信息传递方式,它允许应用之间或应用与系统之间进行通信,而不需要知道对方的详细信息。这种机制基于发布者-订阅者模型,通过Intent对象传递广播消息,是Android系统灵活性和动态性的关键特征之一。
  • 在Android中,广播分为两类:标准广播和有序广播。
  • 标准广播是一种异步广播,被发送后所有注册的接收器几乎同时接收到该广播。这种广播效率较高,但接收器无法阻止广播的进一步传递,也不保证接收器的执行顺序。
  • 有序广播则是一种同步广播,被发送后,接收器按照优先级依次接收广播。优先级高的接收器可以先处理广播,并且可以通过abortBroadcast()方法阻止广播继续传递,从而实现广播的拦截。
  • 广播机制的核心组件包括:
  1. 广播发送者:负责发送广播。可以是系统本身,也可以是任何应用。发送广播通常使用Intent对象,并通过sendBroadcast()、sendOrderedBroadcast()等方法实现。
  2. 广播接收器(BroadcastReceiver):负责接收和处理广播。应用通过定义BroadcastReceiver子类并重写onReceive()方法来接收广播。接收器可以在AndroidManifest.xml中静态注册,也可以在代码中动态注册。
  3. Intent:广播的载体,包含了广播的类型和可选的数据。Intent可以是显式的,指定接收器的类名;也可以是隐式的,通过action字符串匹配接收器。
  • 广播机制的使用场景非常广泛:
  • 系统事件通知:例如,当电池电量发生变化、屏幕解锁、收到短信时,系统会发送广播通知应用。
  • 应用间通信:应用可以发送自定义广播,让其他应用知道某些事件的发生,实现应用间的数据共享或协同工作。
  • 后台服务:应用可以在后台监听特定广播,以便在特定条件下执行任务,如定时任务或网络状态变化响应。
    尽管广播机制强大,但也存在一些限制和注意事项:
  • 性能影响:频繁的广播可能导致性能问题,因此应合理使用广播。
  • 安全问题:广播可能会被其他应用接收,因此敏感信息不应通过广播传递。
  • Android版本差异:不同版本的Android对广播机制的支持有所不同,如Android 8.0(API 级别 26)引入了限制后台执行的限制,影响了静态注册的广播接收器。
  • Android广播机制为应用间的通信提供了一种简单而有效的方式,通过Intent传递消息,BroadcastReceiver接收和处理消息,实现了系统内外的灵活交互。然而,开发者在使用时需要注意性能和安全问题,并适应不同Android版本的变化。

🌻3.代码实例

🐓3.1 发送广播

  • MainActivity.java
package com.example.broadcastdemo;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;public class MainActivity extends AppCompatActivity {private static final String TAG = MainActivity.class.getSimpleName();private BroadcastReceiver audioControlReceiver = new AudioControlReceiver();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btnStart = findViewById(R.id.buttonStart);Button btnStop = findViewById(R.id.buttonStop);// 动态注册广播接收器IntentFilter filter = new IntentFilter(AudioControlReceiver.STREAM_VOLUME_CHANGE);registerReceiver(audioControlReceiver, filter);btnStart.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 发送测试广播Intent intent = new Intent(AudioControlReceiver.STREAM_VOLUME_CHANGE);intent.putExtra(AudioControlReceiver.STREAM_TYPE, 1);intent.putExtra(AudioControlReceiver.USAGE, 1);intent.putExtra(AudioControlReceiver.MUTE, true);intent.putExtra(AudioControlReceiver.GROUPID, 3);sendBroadcast(intent);Log.d(TAG,"xxx------------> "+new Exception().getStackTrace()[0].getFileName()+", "+new Exception().getStackTrace()[0].getMethodName()+"() , line = "+new Exception().getStackTrace()[0].getLineNumber());}});}
}

🐓3.2 接收广播

  • AudioControlReceiver.java
package com.example.broadcastdemo;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;public class AudioControlReceiver extends BroadcastReceiver {private static final String TAG = "AudioControlReceiver";public static String STREAM_VOLUME_CHANGE = "STREAM_VOLUME_CHANGED_ACTION";public static String STREAM_TYPE = "STREAMTYPE";public static String USAGE ="USAGE";public static String MUTE = "MUTE";public static String GROUPID = "GROUPID";@Overridepublic void onReceive(Context context, Intent intent) {if (intent != null && STREAM_VOLUME_CHANGE.equals(intent.getAction())) {int streamType = intent.getIntExtra(STREAM_TYPE, -1);int usage = intent.getIntExtra(USAGE, -1);int groupId = intent.getIntExtra(GROUPID, -1);boolean mute = intent.getBooleanExtra(MUTE, false);Log.d(TAG, "xxx-----> Received broadcast: action = " + intent.getAction());Log.d(TAG, "xxx-----> Received broadcast: groupId = " + groupId + ", mute =" + mute + ", usgae = " + usage + ", streamType = " + streamType);}}
}

🐓3.3 配置广播

  • AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><uses-permission android:name="android.permission.WRITE_SETTINGS" /><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.BroadcastDemo"tools:targetApi="31"><activityandroid:name=".MainActivity"android:exported="true"android:theme="@style/Theme.BroadcastDemo"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><receiver android:name=".AudioControlReceiver"android:exported="true"><intent-filter><action android:name="STREAM_VOLUME_CHANGED_ACTION" /></intent-filter></receiver></application>
</manifest>

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

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

相关文章

windows实现自动化按键

1.选择目标窗口 获取窗口句柄 void KeyPresser::selectWindow() {SetWinEventHook(EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, NULL, WinEventProc, 0, 0, WINEVENT_OUTOFCONTEXT);selectedWindowLabel->setText("请点击目标窗口..."); }void CALLBACK …

word的进阶

Word的基本操作 这里主要用到的软件是WPS软件。 一、创建一个文档 第一种&#xff1a;快捷键&#xff1a;ctrln第二种&#xff1a;通过界面鼠标点击 二、设置文档背景 更换过的背景如下&#xff1a; 三、章节、目录导航的设置 四、插入目录页 五、对历史文档进行管理 六、…

收银系统源码-千呼新零售收银视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

基于 asp.net家庭财务管理系统设计与实现

博主介绍&#xff1a;专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用感兴趣的可以先…

XLua原理(一)

项目中活动都是用xlua开发的&#xff0c;项目周更热修也是用xlua的hotfix特性来做的。现研究底层原理&#xff0c;对于项目性能有个更好的把控。 本文认为看到该文章的人已具备使用xlua开发的能力&#xff0c;只研究介绍下xlua的底层实现原理。 一.lua和c#交互原理 概括&…

Github报错:Kex_exchange_identification: Connection closed by remote host

文章目录 1. 背景介绍2. 排查和解决方案 1. 背景介绍 Github提交或者拉取代码时&#xff0c;报错如下&#xff1a; Kex_exchange_identification: Connection closed by remote host fatal: Could not read from remote repository.Please make sure you have the correct ac…

【Qt】常用控件 Q widget的enabled属性,geometry属性

Qt是一个实现图形化程序的程序。为了便于我们开发&#xff0c;Qt为我们提供了许多“控件”。我们需要熟悉并掌握这些控件的使用。 一.什么是控件 控件是构成⼀个图形化界⾯的基本要素. 示例一&#xff1a; 像上述⽰例一中的,按钮,列表视图,树形视图,单⾏输⼊框,多⾏输⼊框,滚动…

OPC UA边缘计算耦合器BL205工业通信的最佳解决方案

OPC UA耦合器BL205是钡铼技术基于下一代工业互联网技术推出的分布式、可插拔、结构紧凑、可编程的IO系统&#xff0c;可直接接入SCADA、MES、MOM、ERP等IT系统&#xff0c;无缝链接OT与IT层&#xff0c;是工业互联网、工业4.0、智能制造、数字化转型解决方案中IO系统最佳方案。…

硅谷裸机云多IP服务器怎么样?

硅谷裸机云多IP服务器是一种在硅谷地区提供的、具有多个IP地址的裸机云服务器。这种服务器结合了裸机服务器的高性能和云服务器的灵活性&#xff0c;同时提供了多个IP地址&#xff0c;为用户的各种需求提供了支持。以下是关于硅谷裸机云多IP服务器的一些详细信息&#xff0c;ra…

智能硬件——0-1开发流程

文章目录 流程图1. 市场分析具体分析 2. 团队组建2. 团队组建早期团队配置建议配置一&#xff1a;基础型团队 (4人)配置二&#xff1a;扩展型团队 (6人)配置三&#xff1a;全面型团队 (7人) 3. 产品需求分析4. ID设计&#xff08;Industrial Design, 工业设计&#xff09;5. 结…

智慧监狱整体解决方案

智慧监狱整体解决方案摘要&#xff1a; 对智慧监狱的理解 智慧监狱通过集成监控图像资源、报警信息、安防信息和业务信息&#xff0c;实现资源共享和信息互通。构建三级警戒架构&#xff0c;实现分监区、监狱和局级监狱管理局的应急指挥和管理。 发展历程 从2006年至2021年&am…

华为云.VPC关联概念与对等连接实践

云计算.华为云 VPC关联概念与对等连接实践 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/q…

LeNet实验 四分类 与 四分类变为多个二分类

目录 1. 划分二分类 2. 训练独立的二分类模型 3. 二分类预测结果代码 4. 二分类预测结果 5 改进训练模型 6 优化后 预测结果代码 7 优化后预测结果 8 训练四分类模型 9 预测结果代码 10 四分类结果识别 1. 划分二分类 可以根据不同的类别进行多个划分&#xff0c;以…

新时代多目标优化【数学建模】领域的极致探索——数学规划模型

目录 例1 1.问题重述 2.基本模型 变量定义&#xff1a; 目标函数&#xff1a; 约束条件&#xff1a; 3.模型分析与假设 4.模型求解 5.LINGO代码实现 6.结果解释 ​编辑 7.敏感性分析 8.结果解释 例2 奶制品的销售计划 1.问题重述 ​编辑 2.基本模型 3.模…

Python酷库之旅-第三方库Pandas(036)

目录 一、用法精讲 111、pandas.Series.item方法 111-1、语法 111-2、参数 111-3、功能 111-4、返回值 111-5、说明 111-6、用法 111-6-1、数据准备 111-6-2、代码示例 111-6-3、结果输出 112、pandas.Series.xs方法 112-1、语法 112-2、参数 112-3、功能 112-…

基于Centos7搭建rsyslog服务器

一、配置rsyslog可接收日志 1、准备新的Centos7环境 2、部署lnmp环境 # 安装扩展源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo# 安装扩展源 yum install nginx -y# 安装nginx yum install -y php php-devel php-fpm php-mysql php-co…

mac二进制安装operator-sdk

0. 前置条件 1. 安装go 安装步骤略。 1. 下载operator-sdk源码包 https://github.com/operator-framework/operator-sdk 1.1 选择适合当前go版本的operator版本&#xff0c;在operator-sdk/go.mod文件中可以查看Operator-sdk使用的go版本。 2. 编译 源码包下载后&#x…

【从零开始实现stm32无刷电机FOC】【实践】【5/7 stm32 adc外设的高级用法】

目录 采样时刻触发采样同步采样 点击查看本文开源的完整FOC工程 本节介绍的adc外设高级用法用于电机电流控制。 从前面几节可知&#xff0c;电机力矩来自于转子的q轴受磁力&#xff0c;而磁场强度与电流成正比&#xff0c;也就是说电机力矩与q轴电流成正相关&#xff0c;控制了…

UDP网口(1)概述

文章目录 1.计算机网络知识在互联网中的应用2.认识FPGA实现UDP网口通信3.FPGA实现UDP网口通信的方案4.FPGA实现UDP网口文章安排5.传送门 1.计算机网络知识在互联网中的应用 以在浏览器中输入淘宝网为例&#xff0c;介绍数据在互联网是如何传输的。我们将要发送的数据包称作A&a…

SpringAI简单使用(本地模型+自定义知识库)

Ollama 简介 Ollama是一个开源的大型语言模型服务工具&#xff0c;它允许用户在本地机器上构建和运行语言模型&#xff0c;提供了一个简单易用的API来创建、运行和管理模型&#xff0c;同时还提供了丰富的预构建模型库&#xff0c;这些模型可以轻松地应用在多种应用场景中。O…