【android telecom 框架分析 01】【基本介绍 2】【BluetoothPhoneService为何没有源码实现】

1. 背景
我们会在很多资料上看到 BluetoothPhoneService 类,但是我们在实际 aosp 中确找不到具体的实现, 这是为何?
这是一个很好的问题!虽然在车载蓝牙电话场景中我们经常提到类似 BluetoothPhoneService 的概念,但在 AOSP 官方源码中是没有直接名为 BluetoothPhoneService 的类的,原因和理解方式如下:
2. BluetoothPhoneService 是一种抽象描述或厂商实现
在 Android 车载系统(Android Automotive 或与 IVI 厂商合作的系统)中,BluetoothPhoneService 更多是:
-
厂商在 IVI 系统中自定义的服务名称,并不属于 AOSP 的标准模块。
-
可能是一个 HAL 接口的封装,对蓝牙 HFP 客户端(
BluetoothHeadsetClient)的进一步抽象。 -
有些厂商会以这个名字命名自己的接口或服务类,以方便理解,比如实现拨号、接听、挂断等蓝牙电话功能。
3. AOSP 中真正起作用的蓝牙电话类
在 AOSP 中处理蓝牙电话相关功能的核心类包括:
| 类名 | 作用 | 所在模块 |
|---|---|---|
BluetoothHeadsetClient | 蓝牙 HFP 客户端,车机通过它控制电话行为(拨号、挂断、接听等) | packages/modules/Bluetooth |
HeadsetClientStateMachine | 状态机,处理 AT 命令的收发、通话状态同步 | packages/modules/Bluetooth |
BluetoothHeadsetClientService | HFP 客户端的实际服务实现类 | packages/modules/Bluetooth |
TelecomManager | 统一 Android 电话服务调用接口 | frameworks/base/telecomm |
4. 车机中如何组装“BluetoothPhoneService”功能?
假设你是车机开发者或车载 ROM 厂商,一般做法是:
-
在系统 app 或 service 层实现一个自己的 Bluetooth 电话服务,如
MyBluetoothPhoneService -
在这个类中组合以下能力:
-
使用
BluetoothHeadsetClient来拨号、挂断 -
监听
CallStateChanged广播更新 UI -
提供 API 给系统 UI/语音助手使用
-
举例:
public class MyBluetoothPhoneService extends Service {private BluetoothHeadsetClient mClient;public void dial(String number) {BluetoothDevice device = getConnectedDevice();mClient.dial(device, Uri.fromParts("tel", number, null));}public void endCall() {BluetoothDevice device = getConnectedDevice();List<BluetoothHeadsetClientCall> calls = mClient.getCurrentCalls(device);for (BluetoothHeadsetClientCall call : calls) {if (call.isActive()) {mClient.terminateCall(device, call);}}}
}
5. 总结:为啥你找不到 BluetoothPhoneService
| 原因 | 说明 |
|---|---|
| 并非标准类 | AOSP 并没有一个叫这个名字的类 |
| 厂商自定义 | 通常是 OEM 在车机上自定义的服务接口 |
| 功能来源拆散 | 相关功能被分散在 BluetoothHeadsetClientService、TelecomService、CallsManager 等模块中 |
相关文章:
【android telecom 框架分析 01】【基本介绍 2】【BluetoothPhoneService为何没有源码实现】
1. 背景 我们会在很多资料上看到 BluetoothPhoneService 类,但是我们在实际 aosp 中确找不到具体的实现, 这是为何? 这是一个很好的问题!虽然在车载蓝牙电话场景中我们经常提到类似 BluetoothPhoneService 的概念,但…...
【mongodb】数据库操作
目录 1. 查看所有数据库2. 切换到指定数据库(若数据库不存在,则创建)3. 查看当前使用的数据库4. 删除当前数据库5.默认数据库 1. 查看所有数据库 1.show dbs2.show databases 2. 切换到指定数据库(若数据库不存在,则…...
【Harmony】文本公共接口EditMenuOptions的使用
文章目录 一、EditMenuOptions介绍二、相关接口介绍2.1、editMenuOptions2.2、EditMenuOptionsonCreateMenu函数说明onMenuItemClick函数说明 2.3、TextRange对象说明2.4、TextMenuItem对象说明2.5、TextMenuItemId属性ofequals 三、简单案例 一、EditMenuOptions介绍 EditMen…...
《软件设计师》复习笔记(14.1)——面向对象基本概念、分析设计测试
目录 一、面向对象基本概念 对象(Object) 类(Class) 抽象(Abstraction) 封装(Encapsulation) 继承(Inheritance) 多态(Polymorphism&#…...
C++ 基于多设计模式下的同步异步⽇志系统-1准备工作
一.项目介绍 项⽬介绍 本项⽬主要实现⼀个⽇志系统, 其主要⽀持以下功能: • ⽀持多级别⽇志消息 • ⽀持同步⽇志和异步⽇志 • ⽀持可靠写⼊⽇志到控制台、⽂件以及滚动⽂件中 • ⽀持多线程程序并发写⽇志 • ⽀持扩展不同的⽇志落地⽬标地 二.日志系统的三种实现…...
JS中实现类似sleep、wait、delay的延时功能
前言 编写代码时很多时候需要进行流程化的操作,各个流程间通常需要等待一定时间,这在很多语言中通常可以使用 sleep 、 wait 、 delay 等函数来实现。JavaScript原生并没有类似的功能,想要延时通常就是使用 setTimeout(functionRef, delay) …...
Banana Pi BPI-RV2 RISC-V 路由器开发板发售, 全球首款RISC-V路由器
Banana Pi BPI-RV2 开源路由器是矽昌通信和⾹蕉派开源社区(Banana Pi )合作设计, 联合打造全球首款RISC-V架构路由器开发板。 这是香蕉派开源社区与矽昌通信继BPI-Wifi5 低成本Wifi5 路由器合作之后的又一力作,为全球开发者与商业客户提供基于…...
M|触碰你
rating: 7 M|触碰你 碰碰的设定本身还可以,但是结局有点怪。 中期剧情发展不错,三个男人和两个女人的故事。友情线笔墨多但很常规,感情线有点意思。对人际关系、沟通等的主题的探索蛮好。 总之,虽然宣传是《未闻花…...
MAUI项目iOS应用以进 App Store 分发
目录 一.通过Visual Studio分发应用1. 登录Apple 开发者帐户到 Visual Studio2.创建分发证书和配置文件3. 分发应用4. 在App Store Connect 中创建应用程序记录5. 如果你想使用mac发布应用 一.通过Visual Studio分发应用 1. 登录Apple 开发者帐户到 Visual Studio 首先我们要…...
CentOS 7系统yum报错解决方案(CentOS 7官方EOL问题修复)
摘要 解决CentOS 7因EOL导致的yum update报错问题,通过替换阿里云镜像源恢复软件安装功能,包含详细操作步骤、操作截图、验证方法与备选镜像源,附有安全风险提示。 一、故障现象与原因分析 1.1 典型报错信息 # 执行yum命令时出现ÿ…...
解决Windows update服务启动拒绝访问的问题 | wuauserv 注册表拒绝访问的方法
在某些情况下,为了配置系统更新相关服务(例如禁用 Windows 自动更新),我们需要更改注册表中 wuauserv 项的权限。本教程将带你一步步操作,成功获取并修改权限。 修改注册表路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wuauserv 步骤一:打开注册表编辑…...
深入解析 JDK jstack 命令:线程分析的利器
你点赞了吗?你关注了吗?每天分享干货好文。 高并发解决方案与架构设计。 海量数据存储和性能优化。 通用框架/组件设计与封装。 如何设计合适的技术架构? 如何成功转型架构设计与技术管理? 在竞争激烈的大环境下,…...
【操作系统原理03】处理机调度与死锁
文章目录 大纲一.处理机调度概念与层次0.大纲1.基本概念2.三个层次3.七状态模型4.三层调度都对比与联系 二.进程调度的时机,切换与过程的调度方式0.大纲1.进程调度时机2.调度方式3.进程的切换与过程 三.调度器和闲逛资源1.调度器/调度程序2.闲逛进程 四.调度算法的评…...
Quipus,LightRag的Go版本的实现
1 项目简介 奇谱系统当前版本以知识库为核心,基于知识库可以快构建自己的问答系统。知识库的Rag模块的构建算法是参考了LightRag的算法流程的Go版本优化实现,它可以帮助你快速、准确地构建自己的知识库,搭建属于自己的AI智能助手。与当前LLM…...
使用 Vite 快速搭建现代化 React 开发环境
1.检查环境 说明:检测环境,node版本为18.20.6。 2.创建命令 说明:创建命令,选择对应的选项。 npm create vitelatest 3.安装依赖 说明:安装相关依赖。 npm i...
关于UE5的抗锯齿和TAA
关于闪烁和不稳定现象的详细解释 当您关闭抗锯齿技术时,场景中会出现严重的闪烁和不稳定现象,尤其在有细节纹理和小物体的场景中。这种现象的技术原因如下: 像素采样问题 在3D渲染中,每个像素只能表示一个颜色值,但…...
PG数据库推进医疗AI向量搜索优化路径研究(2025年3月修订版)
PG数据库推进医疗AI向量搜索优化路径研究 一、医疗 AI 向量搜索的发展现状与挑战 1.1 医疗数据特征与检索需求 医疗数据作为推动医疗领域进步与创新的关键要素,具有鲜明且复杂的特征。从多模态角度看,医疗数据涵盖了结构化数据,如患者基本信息、检验检查报告中的数值结果;…...
可穿戴经颅多通道直流电刺激产品测试总结
一 概念原理 tDCS 是一种非侵入性的神经调节技术,利用恒定、低强度直流电(通常为 0 - 2mA)通过电极作用于特定的大脑区域。其工作原理是通过调节神经元的膜电位,来增加或降低神经元兴奋性的特定区域,从而改变大脑运作。…...
什么是 Stream
Stream 是对集合对象功能的增强,它不是集合,也不存储数据,而是从集合中抽象出一条数据通道,让你可以用链式方式一步步处理数据。 🔧 常见操作分类 类型方法举例创建stream(), Stream.of(), Arrays.stream()中间操作fi…...
详解与HTTP服务器相关操作
HTTP 服务器是一种遵循超文本传输协议(HTTP)的服务器,用于在网络上传输和处理网页及其他相关资源。以下是关于它的详细介绍: 工作原理 HTTP 服务器监听指定端口(通常是 80 端口用于 HTTP,443 端口用于 HT…...
-XX:+HeapDumpOnOutOfMemoryError 会打印哪些oom错误
-XX:HeapDumpOnOutOfMemoryError 参数会在 JVM 发生以下 OutOfMemoryError(OOM) 错误时自动生成堆转储文件(Heap Dump),便于后续分析内存溢出原因: 一、触发转储的 OOM 错误类型 Java 堆溢出…...
Moldflow模流分析教程
Moldflow模流分析教程:...
计算机网络 3-4 数据链路层(局域网)
4.1 局域网LAN 特点 1.覆盖较小的地理范围 2.较低的时延和误码率 3.局域网内的各节点之间 4.支持单播、广播、多播 分类 关注三要素 (出题点) ①拓扑结构 ②传输介质 ③介质访问控制方式 硬件架构 4.2 以太网 4.2.1 层次划分 4.2.2 物理层标准…...
加密与解密完全指南,使用Java实现
文章目录 1. 加密基础知识1.1 什么是加密?1.2 加密的历史简介1.2.1 古典加密1.2.2 现代加密的起源1.3 加密的基本概念1.3.1 密码学中的关键术语1.3.2 加密的基本原则1.4 加密的分类1.4.1 对称加密(Symmetric Encryption)1.4.2 非对称加密(Asymmetric Encryption)1.4.3 哈希…...
单片机AIN0、AIN1引脚功能
目录 1. 模拟-数字转换器(ADC) 2. 交流电源(AC) 总结 这两部分有什么区别? 在这个电路图中,两个部分分别是模拟-数字转换器(ADC)和交流电源(AC)。以下是这…...
如何增加 Elasticsearch 中的 primary shard 数量
作者:来自 Elastic Kofi Bartlett 探索增加 Elasticsearch 中 primary shard 数量的方法。 更多阅读: Elasticsearch:Split index API - 把一个大的索引分拆成更多分片 Elasticsearch:通过 shrink API 减少 shard 数量来缩小 El…...
Java 并发性能优化:线程池的最佳实践
Java 并发性能优化:线程池的最佳实践 在 Java 并发编程的世界里,线程池堪称提高应用性能与稳定性的神器。恰如其分地运用线程池,能让我们在多线程任务调度时游刃有余,既能避免线程频繁创建销毁带来的开销,又能合理管控…...
【综述】一文读懂卷积神经网络(CNN)
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。本文旨在介绍CN…...
Python爬虫实战:获取网易新闻数据
一、引言 随着互联网的飞速发展,网络上蕴含着海量的信息资源。新闻数据作为其中的重要组成部分,对于舆情分析、市场研究、信息传播等多个领域具有重要价值。网易新闻作为国内知名的新闻平台,拥有丰富多样的新闻内容。使用 Python 的 Scrapy 框架进行网易新闻数据的爬取,可…...
YOLO学习笔记 | 基于COCO Stuff数据集与YOLOv11的多类别物体检测与分割
基于COCO Stuff数据集与YOLOv11的多类别物体检测与分割技术解析 一、技术背景与YOLOv11核心改进 YOLOv11是Ultralytics推出的新一代目标检测与分割模型,在YOLOv8的基础上进一步优化了架构设计与训练流程。其核心改进包括: 自适应特征增强(AFE)模块:通过空间上下文模块(…...
