当前位置: 首页 > article >正文

智能手表与 App 蓝牙低功耗(BLE)实战指南

DemoApplication — 智能手表与 App 蓝牙低功耗BLE实战指南文档主题智能手表与手机 App 之间的通信常采用蓝牙低功耗BLE。相比经典蓝牙BLE 更省电、适合周期性小数据同步心率、步数、通知、固件升级进度等是穿戴设备的主流方案。大文件如MP3 音频若必须走 BLE需按分包与断点续传设计见下文第四章第 6 节。本仓库当前为Jetpack Compose示例工程minSdk 24/compileSdk 34可作为在此基础上接入 BLE 的起点。一、BLE 在手表场景中的常见用法能力说明GATT 客户端手机 App 通常作为Central中心设备手表作为Peripheral外设App 连接后读写特征值Characteristic。通知 / 指示手表主动上报数据使用Notify或IndicateIndicate 带应用层确认。写入指令App 向手表下发控制或配置对可写特征执行Write / Write Without Response。MTU 与分包数据量大时需协商MTU或在上层做分包与粘包协议。配对与绑定涉及敏感数据或防重放时可能依赖系统配对纯明文广播连接则未必每次配对。常见协议形态厂商自定义GATT Service/Characteristic UUID或基于标准服务如 Heart Rate、Battery 等再扩展私有特征。二、开发环境与本项目运行Android Studio建议 Hedgehog 及以上自带 JDK 与 Android SDK。设备真机推荐用于 BLE模拟器对蓝牙支持有限。运行用 Android Studio 打开工程根目录同步 Gradle 后选择设备运行app模块。当前入口MainActivity使用 Compose已实现BLE Demo权限门闸、扫描列表、连接、服务枚举、requestMtu、尝试读标准电量、WatchProtocol本地分包演示见ble与ui/BleDemoScreen包。三、Android 端实战步骤推荐顺序1. 声明权限随 Android 版本组合使用大致规律Android 12API 31起位置权限与蓝牙权限拆分扫描场景常需精确位置或新蓝牙权限组合具体以目标targetSdk与官方文档为准。清单中常见项名称以你最终 targetSdk 为准核对官方表BLUETOOTH/BLUETOOTH_ADMIN低版本BLUETOOTH_SCAN、BLUETOOTH_CONNECTAPI 31若扫描需满足「旧策略」ACCESS_FINE_LOCATION等BLUETOOTH_ADVERTISE若 App 需作为外设广播一般手表 App 较少实战要点在运行时请求危险权限连接前检查BluetoothAdapter是否可用、蓝牙是否开启。2. 扫描附近外设使用BluetoothLeScannerstartScan/stopScan。过滤按厂商提供的Service UUID或设备名前缀过滤减少列表噪音。节流避免长时间全量扫描耗电找到目标后及时stopScan。3. 建立 GATT 连接device.connectGatt(context, false, callback)在BluetoothGattCallback中处理onConnectionStateChange已连接 / 断开onServicesDiscovered发现服务后枚举Service → Characteristic → DescriptoronCharacteristicRead/onCharacteristicWrite/onCharacteristicChangedNotify 数据4. 打开 Notify / Indicate对 CCCDClient Characteristic Configuration Descriptor写入ENABLE_NOTIFICATION_VALUE或ENABLE_INDICATION_VALUE。在onDescriptorWrite中确认成功后再认为「订阅就绪」。5. 读写业务数据读readCharacteristic注意队列部分机型不宜连续无等待地堆叠操作。写根据固件约定选择Write With Response或Without Response。协议与手表固件约定好字节序、命令字、长度、校验CRC 等及错误码。6. 断开与释放disconnect()后close()避免泄漏页面销毁或退后台策略要与产品一致部分场景需保持连接。7. 前台服务可选但常见长时间同步或 OTA 时使用Foreground Service 类型合适的foregroundServiceType避免被系统强杀并符合后台限制。四、大量数据如走路步数怎么传BLE 单次 ATT 载荷受MTU限制步数若按「每分钟/每小时一条」累积成几天历史很容易超过单包长度必须在应用层协议和产品形态上一起设计。1. 能少传就少传摘要优先实时连接期间只推「当前会话增量」或「今日累计」字节很少。历史不要传原始传感器流用按天/按小时聚合的结构时间戳 步数 可选距离/卡路里必要时再支持「拉取某一天明细」。二进制紧凑定长记录或小端整数数组避免 JSON/XML 占满 MTU。2. 必须传大包时MTU 分包 确认协商 MTU连接建立后调用requestMtu()具体上限因手机与手表协议栈而异常见在约 185247 字节有效 ATT 载荷量级以实测为准。自定义分包帧例如「命令字 总长度 分片序号/总分片数 载荷 CRC」。手表按序发 Notify或 App 读长数据App 侧重组缓冲区丢包则重传某片。流控每发 N 包等一层 ACK或 Indicate避免手表 RAM 与控制器队列溢出导致断连。Indicate vs Notify大批量若要求可靠可对关键片用Indicate有确认或仍用 Notify 但在应用层发 ACK 包。3. 传输路径选择Notify 推流手表主动推适合「同步历史」会话注意 Android 端串行化 GATT 操作不要无脑并发写。Read 分块固件把历史放在「逻辑块」里App 发「读第 k 块」命令再readCharacteristic或走私有「块特征」便于断点续传。Prepare Write / Long Write标准上适合较长写入穿戴里更常见仍是厂商自定义分包实现简单、两端一致即可。4. 吞吐与体验连接间隔主要由系统与对端协商App 能控制的有限大批量同步时保持屏幕常亮、前台服务减少被限速或杀后台。PHY若双方支持2M PHY在可接受距离内有利于提高速率仍远低于经典蓝牙。失败重试超时、CRC 错误、只收到部分分片时从最后成功序号续传。5. 与「经典蓝牙」的取舍若手表同时支持经典蓝牙SPP 等且产品允许配对两套栈大批量文件类同步可走经典通道纯 BLE 手表则按上文分包与聚合设计即可。6. MP3 / 音频文件传输MP3 属于已压缩的二进制大文件常见数 MB与步数不同不能靠「聚合摘要」缩小只能整文件按字节搬运技术本质与固件 OTA 分包相同只是落盘路径与格式校验不同。能力预期BLE 实际吞吐受连接间隔、PHY、对端实现影响常见在每秒数十 KB 量级以双端实测为准。一首 5MB 的 MP3 纯 BLE 可能要数分钟甚至更久且耗电、占连接需有明确 UI进度、取消、后台策略。不要再压一层「通用压缩」MP3 本身已压缩gzip 等收益很小徒增 CPU。协议层面与上文「分包 流控」一致定义文件会话fileId或路径 token、总长度、分片大小建议与协商 MTU 对齐留出帧头/CRC 空间、分片序号、载荷、CRC32/SHA256整文件校验。断点续传持久化「已确认收到的最大连续偏移」重连后从该偏移继续避免用户反复全量传。方向通常是手机 → 手表下发铃声、离线播客片段若手表回传录音 MP3思路相同但注意手表侧存储空间与写闪存寿命。存储与格式固件约定写入路径如「音乐分区」、单文件上限可选先写到临时文件再rename做原子提交避免半截文件被播放器打开。产品形态上的更优解优先评估手表带 WiFi / 配套手机热点大文件走 HTTP(S) 或厂商私有 WiFi 通道体验远好于纯 BLE。经典蓝牙A2DP/SPP 或厂商大通道适合「传歌到表」类场景若硬件支持应优先考虑。只做短音频闹钟、提示音可用几十数百 KB 的短片段甚至降级为低码率或专用提示音格式显著缩短 BLE 传输时间。Android 实现注意读本地 MP3 用顺序流式读取FileInputStream/MappedByteBuffer分块避免一次性readBytes()整文件进内存。传输会话放在前台服务中执行并处理系统杀进程、蓝牙断开后的恢复与重试。五、与手表固件协作的检查清单UUID 表主服务 UUID、各特征 UUID、属性读/写/Notify、字节布局文档。连接参数是否要求指定 PHY、连接间隔偏好由固件与主机协商但需知预期。安全是否加密、是否必须配对、密钥与证书流程。OTA分包大小、断点续传、校验与回滚策略。调试工具手机端可用nRF Connect等 App 对真实手表 GATT 做探查与 Android 日志对照。六、常见问题与排查现象可能原因扫描不到设备权限未授予、蓝牙关闭、手表未处于可发现模式、过滤条件过严连接立刻断开UUID 不匹配、固件只允许单连接、RSSI 过弱、固件侧拒绝Notify 无数据CCCD 未写成功、订阅错特征、固件未推数据写入无响应特征不可写、需 Write Without Response、MTU/长度超限调试时打开HCI snoop或使用厂商抓包工具可快速区分是 App 层还是协议/固件层问题。七、在本项目中落地的建议结构Kotlin便于维护的拆分方式示例思路非强制目录名BlePermissions统一请求与解释权限文案BleScanner扫描生命周期与回调转换GattClient封装BluetoothGatt、队列化读写、重连策略WatchProtocol纯 Kotlin 的组包/解包与 UI 解耦UI 层Compose只观察状态已连接 / 扫描列表 / 最新心率等不直接操作 GATT 细节依赖上可逐步引入Kotlin 协程MutableStateFlow向界面层推送状态若后续需要蓝牙相关 Jetpack API再按官方文档添加对应依赖版本。点击跳转代码链接https://gitcode.com/qq_33495943/watchesBLEAPP

相关文章:

智能手表与 App 蓝牙低功耗(BLE)实战指南

DemoApplication — 智能手表与 App 蓝牙低功耗(BLE)实战指南 文档主题 智能手表与手机 App 之间的通信常采用蓝牙低功耗(BLE)。相比经典蓝牙,BLE 更省电、适合周期性小数据同步(心率、步数、通知、固件升…...

使用不同模型相同提示词写一段systemverilog代码,deepseek太让人惊喜!

熟悉systemverilog的朋友应该都知道fork join_any disable有一个小陷阱,就是可能会误kill其他进程,所以需要一个guard fork。突然奇想,看看哪个大模型可以不经过提醒(这个很重要,因为我们大概率不会把这个加入到提示词&#xff01…...

AI 时代为什么所有人都在用 Markdown 写东西

如果你最近开始频繁用 AI 工具,会发现一个现象:不管是 ChatGPT 还是其他大模型,输出的内容几乎都是 Markdown 格式——标题用 #,重点用 **,代码用反引号包起来。 Markdown 是一种轻量级的标记语言,1.0 版本…...

复制粘贴:那些年芯片工程师的“黑科技“

这是一个真实的笑话,也是一段不算久远的历史。大模型出现之前,芯片工程师提升效率的核心手段,说出来让人笑中带泪:CtrlC,然后CtrlV。那时候的工程师是认真在维护一个"代码片段收藏夹"的。一个写了三年RTL的工…...

GHelper终极指南:华硕笔记本轻量级性能调控开源工具

GHelper终极指南:华硕笔记本轻量级性能调控开源工具 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expe…...

工业摇摆筛筛分精度不达标怎么调试整改

——从现象判断到解决落地的实操指南一、精度不达标:先判断“属于哪一类问题”摇摆筛在化工、食品、医药、建材等行业中,常用于粉料与颗粒的分级作业。当用户发现筛分精度下降时,需要先区分问题的具体表现——不同的现象对应不同的排查方向。…...

共探 AI 转型新路径,数式科技黄梦瑶在 “走进云谷中心” 活动分享核心实战经验

近日,“智领未来・名企对标行”系列活动(第五期:走进云谷中心)隆重召开。本次活动汇聚了数百位制造业CIO、CEO、CTO及行业专家,围绕“AI赋能制造业高质量发展”展开深度探讨。作为深耕企业AI转型培训与咨询的专业机构&…...

【审计专栏】【社会科学】【管理科学】第一百篇 人的需求来源01

人的需求来源 编号 类型 需求模型 人对其他个体/群体/多群体的需求来源和需求形式的数学方程式 人自身的需求匹配 关联知识和法律法规及监管 1 宏观社会 国家利益模型 需求来源:主权安全、领土完整、发展利益、国际地位。形式:博弈论中的效用最大化,如 U_national=…...

车规级芯片缺料怎么办?深智微华润微授权代理提供元器件一站式配单与停产替代

汽车终端工厂的采购经理、硬件工程师,以及方案公司、代工厂的物料计划员,正面临一个共性难题:英飞凌、ST、NXP等车规级芯片交期动辄26周以上,大量成熟制程的工业级功率器件因产线调整突然停产,BOM表频繁"缺料断链…...

陆空两栖复合结构飞行器总体设计与PID控制系统【附模型】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,可以私信,或者点击《获取方式》 (1)纵列式共轴变桨距与全向轮…...

无人机无人车空地协同巡逻任务分配与路径规划【附程序】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,可以私信,或者点击《获取方式》 (1)考虑实际路网约束与动态汇…...

AI赋能人才分析:从数据到决策的智能人力资源管理实践

1. 项目概述:当AI遇见人才管理在人力资源这个传统上高度依赖“人”的经验和直觉的领域,一场静默的革命正在进行。过去,一位资深HR经理判断一份简历是否合适,或者预测哪位员工有离职风险,很大程度上依赖于其多年的行业积…...

基于文本挖掘的课程技能图谱构建:从数据采集到可视化分析

1. 项目概述:从课程列表到技能地图的旅程 最近在帮几位想申请荷兰数据科学和人工智能硕士的朋友梳理信息,发现了一个挺有意思的痛点。大家面对各个大学官网上琳琅满目的课程列表,比如“高级机器学习”、“大数据系统”、“自然语言处理”&…...

基于CRealNVP深度生成模型的gNTS过程拟合与Quanto期权定价实践

1. 项目概述:当深度生成模型遇上复杂衍生品定价最近在琢磨一个挺有意思的课题,就是怎么把前沿的深度生成模型,具体来说是CRealNVP,给“塞”进金融衍生品定价这个传统上由随机微分方程和蒙特卡洛模拟主导的领域里,去解决…...

科研绘图别再乱找素材了

作为常年和学术插图打交道的基础方向博士生,我见过太多朋友实验数据很漂亮,最后因为绘图不规范被编辑打回,甚至因为版权问题耽误接收——其实科研绘图不是让你当设计师,只要摸对规律,选对工具,完全可以快速…...

AI与机器人如何重塑工资不平等?嵌套CES模型的经济学解析

1. 项目概述:当AI开始“卷”高薪岗位最近几年,AI,尤其是以ChatGPT为代表的大语言模型,已经从一个科幻概念变成了我们工作流中的日常工具。作为一个长期关注技术与经济交叉领域的人,我观察到一种普遍的焦虑:…...

数据库性能优化的两大基石

数据库性能优化是一个永恒的话题,DBA们似乎永远在讨论它。究其原因,性能问题是最终用户抱怨最多的一类技术问题——没有之一。如果DBA能迅速解决性能瓶颈,他们就是团队里的英雄;如果迟迟无法定位问题,再好的架构设计也…...

本地大模型轻量级WebUI部署指南:极简架构与实战解析

1. 项目概述:一个为本地大模型打造的轻量级Web界面最近在折腾本地部署的大语言模型(LLM),比如Llama、Qwen这些,相信很多朋友都有同感。虽然模型本身能力越来越强,但交互方式往往还停留在命令行终端&#xf…...

PTO Tile Intrinsics 编程模型

PTO Tile Intrinsics 编程模型 【免费下载链接】pto-isa Parallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations…...

CANN/pyasc块内最小值归约API文档

asc.language.basic.block_reduce_min 【免费下载链接】pyasc 本项目为Python用户提供算子编程接口,支持在昇腾AI处理器上加速计算,接口与Ascend C一一对应并遵守Python原生语法。 项目地址: https://gitcode.com/cann/pyasc asc.language.basic.…...

CANN/pyasc加法ReLU类型转换API

asc.language.basic.add_relu_cast 【免费下载链接】pyasc 本项目为Python用户提供算子编程接口,支持在昇腾AI处理器上加速计算,接口与Ascend C一一对应并遵守Python原生语法。 项目地址: https://gitcode.com/cann/pyasc asc.language.basic.add…...

AI监管政策分析框架:从技术不确定性到全球治理的合规导航

1. 项目概述:当AI撞上“红绿灯”最近和几个做AI产品落地的朋友聊天,大家不约而同地提到了同一个词:合规。以前我们聊的都是模型精度、算力成本、用户增长,现在话题的焦点变成了“这个功能会不会触发监管红线”、“数据跨境怎么处理…...

数据驱动的可解释AI:从特征归因到样本影响分析的实践指南

1. 项目概述:当数据挖掘遇见可解释AI在深度学习的浪潮席卷了几乎所有领域之后,我们获得了一个又一个性能惊人的“黑箱”模型。作为一名长期在数据科学一线工作的从业者,我见证了模型精度从90%提升到99.9%的激动,也亲历了当业务方或…...

基于MCP协议构建MeiliSearch AI助手集成:安全搜索与工作流自动化

1. 项目概述:一个为MeiliSearch打造的MCP服务器如果你正在使用MeiliSearch这个高性能的开源搜索引擎,并且同时是AI Agent生态(比如Claude、Cursor等)的深度用户,那么你很可能遇到过这样的痛点:如何在AI工作…...

修改寄存器的位操作方法

某一位&#xff08;不分组&#xff09;&#xff1a;对变量某位清零&#xff1a; a & ~(1 <<N); 对变量某位置1&#xff1a; a | (1 <<N); 对变量某位取反&#xff1a; a ^ (1 <<N); 分组&#xff08;连续位&#xff09;的情况&#xff1a;A <…...

AI责任归属:从算法黑箱到法律虚构的治理路径

1. 项目概述&#xff1a;当算法“犯错”&#xff0c;谁该负责&#xff1f;最近和一位做AI产品经理的朋友聊天&#xff0c;他提到一个让他头疼的案例&#xff1a;他们公司的一款用于简历初筛的AI工具&#xff0c;在一次使用中&#xff0c;意外地将一批来自某所顶尖高校的毕业生简…...

CANN电力负荷预测算子库

【免费下载链接】elec-ops-prediction elec-ops-prediction 是 CANN 社区 Electrical Engineering SIG&#xff08;电力行业兴趣小组&#xff09;旗下的电力负荷预测算子库&#xff0c; 聚焦于电力系统运行、调度、规划与市场交易中的预测核心需求&#xff0c;面向华为昇腾&…...

创业公司如何借助Taotoken快速原型验证多个AI创意

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 创业公司如何借助Taotoken快速原型验证多个AI创意 对于资源有限的创业团队而言&#xff0c;产品构思阶段往往伴随着大量的不确定性…...

对抗性可解释AI:攻击原理、防御策略与工程实践

1. 项目概述&#xff1a;当可解释性遭遇对抗攻击在机器学习模型日益渗透到高风险决策领域的今天&#xff0c;可解释人工智能&#xff08;XAI&#xff09;被寄予厚望&#xff0c;成为连接复杂算法与人类信任的桥梁。无论是医生需要理解AI辅助诊断的依据&#xff0c;还是法官需要…...

2026年网络安全自学入门(超详细)从入门到精通学习路线规划,学完即可就业!_网安学习路线

随着数字化转型加速与网络威胁常态化&#xff0c;网络安全已成为数字经济的 “安全底座”。2026 年行业数据显示&#xff0c;全球网络安全人才缺口超 300 万&#xff0c;国内缺口达数百万&#xff0c;平均起薪较 IT 行业高出 20%-30%&#xff0c;且呈现 “越老越值钱” 的职业发…...