杰理 SDK 文档中心
首页
首页
  • 概述与快速开始

    • 项目简介与功能总览
    • 运行环境与快速开始
    • 工程结构与文档布局
  • 架构与核心机制

    • 插件架构与原生平台桥接
    • 基类管理器与常量体系
    • 事件流与接收通知机制
  • 蓝牙连接与设备管理

    • 蓝牙连接与状态管理
    • 设备信息、配置与按键设置
    • 双设备连接与多链路管理
    • 数据传输与自定义命令
  • 音乐与媒体控制

    • 设备音乐与手机音乐播放控制
    • 音量与音频输出管理
  • 音效与音频模式

    • 均衡器与音效调节
    • 音频模式与降噪(ANC)设置
    • Auracast 音频广播
  • 设备功能控制

    • 闹钟管理
    • FM 收音机控制
    • 灯光控制
    • 充电仓与彩屏仓管理
  • 示例应用:杰理之家 Demo

    • 应用框架与交互组件
    • 设置、多语言与调试
  • 接口参考与文档中心

    • 发送接口参考
    • 接收接口与事件参考
    • 官方文档与集成指南

设置、多语言与调试

JieLi Home Demo(杰理智能设备 Flutter 演示应用)中与"设置、多语言与调试"相关能力的参考文档,覆盖设备设置管理器(ble_device_setting_manager)、配置管理器(ble_config_manager)、BLE 方法/事件常量体系、工程调试基础设施(analysis_options / devtools / example 工程),以及多语言(i18n)支持的现状与扩展路径。

Purpose and Scope

本页以 code/JieLi_Home_Demo(仓库根目录 JieLi_Home_Demo)为对象,说明演示应用中"设置类能力"如何组织、常量体系如何支撑调试、工程提供了哪些静态分析与调试工具链,以及多语言能力当前的状态。

本页覆盖:

  • 设备设置与配置管理:lib/manager/ble_device_setting_manager.dart、lib/manager/ble_config_manager.dart
  • 常量定义体系:lib/constant/constants.dart、lib/constant/ble_method_constants.dart、lib/constant/ble_event_constants.dart
  • 调试基础设施:根目录与 example/ 下的 analysis_options.yaml、example/devtools_options.yaml、可独立运行的 example 工程
  • 数据传输调试切入点:lib/processor/ble_transfer_processor.dart 中已验证的 PCM→Int16List 转换逻辑
  • 多语言(i18n/l10n)现状评估与扩展建议

留给兄弟页面(仅作引导,不展开):

  • 连接建立与断开流程 → 参见"连接管理"相关页(lib/manager/ble_connection_manager.dart)
  • EQ 均衡器、FM 收音机、闹钟、灯效、TWS 双设备等具体功能 → 各自对应 lib/manager/ 下的独立管理器
  • 音乐播放与音频数据传输 → 参见音频相关页(lib/ble_music_handler.dart、lib/manager/ble_device_music_manager.dart)

说明:本次文档基于仓库文件清单、文件名约定以及可验证的代码片段撰写;凡属推断性内容均已明确标注,未标注处均以源码事实为准。

Overview

JieLi Home Demo 是杰理(JieLi)BLE 芯片方案的 Flutter 参考实现,演示如何通过手机 App 连接、配置和控制 BLE 智能设备(音频/穿戴类)。工程采用"按能力拆分的 Manager 模式":

  • lib/manager/ 下每个管理器对应一类设备能力(设置、EQ、FM、闹钟、灯效、音频、信息查询等);
  • 所有管理器都建立在 lib/ble_base_manager.dart 这一基座之上,通过 lib/constant/ble_method_constants.dart 中定义的方法常量组织 BLE 指令,通过 lib/ble_event_stream.dart 与 lib/constant/ble_event_constants.dart 中的事件常量接收设备回报;
  • lib/processor/ble_transfer_processor.dart 负责大数据传输(如音频 PCM 流)的编解码,是调试数据传输问题的关键切入点;
  • example/ 目录提供可独立运行的示例应用,并配有独立的 pubspec.yaml、analysis_options.yaml 与 devtools_options.yaml,构成完整的上层演示与调试闭环。

"设置"在本工程中有两层含义:设备端设置(通过 BLE 指令读写设备的音量、模式、信息等参数)与工程配置(常量、分析规则、DevTools 选项)。"调试"则依赖静态分析规则、DevTools 工具链与事件/方法常量体系三者的配合。"多语言"在已扫描的 lib/ 源码中未发现 intl / flutter_localizations / l10n 实现痕迹,属于待扩展能力,下文给出基于 Flutter 惯例的扩展路径(明确标注为建议,非当前源码现状)。

Architecture

flowchart TD
    subgraph sg_UI["示例应用层 (example/)"]
        UI["Demo 页面与交互"]
    end

    subgraph sg_Mgr["Manager 层 (lib/manager/)"]
        MSetting["ble_device_setting_manager"]
        MConfig["ble_config_manager"]
        MInfo["ble_device_info_manager"]
        MConn["ble_connection_manager"]
        MOther["EQ / FM / 闹钟 / 灯效 等"]
    end

    subgraph sg_Core["核心基座 (lib/)"]
        Base["ble_base_manager"]
        Stream["ble_event_stream"]
        Xfer["ble_transfer_processor"]
    end

    subgraph sg_Cst["常量定义 (lib/constant/)"]
        CMethod["ble_method_constants"]
        CEvent["ble_event_constants"]
        CAll["constants"]
    end

    subgraph sg_Dbg["调试与工程配置"]
        AnOpt["analysis_options.yaml"]
        DevOpt["devtools_options.yaml"]
        ExCfg["example/ 独立工程配置"]
    end

    UI --> MSetting
    UI --> MConfig
    MSetting --> Base
    MConfig --> Base
    MInfo --> Base
    MConn --> Base
    MOther --> Base
    Base --> CMethod
    Base --> Stream
    Stream --> CEvent
    Xfer --> CAll
    UI -.-> AnOpt
    UI -.-> DevOpt
    ExCfg -.-> UI
    Base -->|"BLE 指令通道"| Dev["BLE 设备"]

架构解读:

  • Manager 层是设置的入口:ble_device_setting_manager 负责设备端设置项的读写,ble_config_manager 负责设备配置类参数的读写,二者与其他功能管理器(EQ、FM、闹钟等)平级,共用同一套基座。
  • 核心基座统一了 BLE 通信语义:ble_base_manager 封装指令下发,ble_event_stream 承载设备事件回调,ble_transfer_processor 处理大数据块(如 PCM 音频)的转换——这一分层保证所有设置类指令走同一条经过验证的通道。
  • 常量体系是设置与调试的"字典":方法常量让指令可读、事件常量让回调可追踪,是排查"指令是否下发、设备是否响应"的首选检查点。
  • 调试配置位于工程根目录与 example 子工程:静态分析规则约束代码质量,DevTools 选项配置运行时调试器,example 工程则提供独立于 SDK 库的 UI 运行环境。

设置能力详解

设备设置管理器:ble_device_setting_manager

文件:code/JieLi_Home_Demo/lib/manager/ble_device_setting_manager.dart

从命名与工程职责划分推断,该管理器是"设备端设置"的统一入口,负责与设备设置项相关的 BLE 指令的组装、下发与结果处理。它与其他管理器(ble_device_info_manager 查询设备信息、ble_audio_mode_manager 设置音频模式、ble_config_manager 读写配置)处于同一层,共同构成设置类能力的完整面:

  • 查询类设置(读设备当前参数)→ 偏向 ble_device_info_manager / ble_config_manager;
  • 修改类设置(写设备参数)→ 偏向 ble_device_setting_manager / ble_audio_mode_manager 等;
  • 所有设置指令最终都通过 ble_base_manager 统一通道下发,保证指令格式与超时处理一致。

推断性说明:上述职责划分基于文件名与 BLE 演示工程的常规组织方式;具体方法签名(如设置音量、切换模式等)以源码为准,查阅入口见本页"API 参考"节。

配置管理器:ble_config_manager

文件:code/JieLi_Home_Demo/lib/manager/ble_config_manager.dart

负责设备配置类参数的读写。在 BLE 演示工程中,配置管理通常承载"设备端持久化参数"(如默认音量、开机模式、个性化设置)的下发与确认,与设备信息查询(一次性读取)形成互补。配置类指令同样复用 ble_method_constants 中定义的方法常量,避免硬编码指令码——这是工程保证可维护性与可调试性的关键设计:所有指令码集中在一个文件,改一处即全局生效,排查时也只需查一个文件。

常量体系:设置的"字典"与调试的"路标"

文件职责(基于命名与引用关系推断)
lib/constant/constants.dart通用常量(如默认参数、协议版本、通用标识),被各层引用
lib/constant/ble_method_constants.dartBLE 指令方法常量,集中定义所有可下发的指令码
lib/constant/ble_event_constants.dartBLE 事件常量,集中定义设备上报的所有事件类型

设计意图:把"指令码"与"事件码"从业务代码中抽离为独立常量文件,带来三重收益——

  1. 可读性:业务代码中只见语义化常量名,不见裸数字指令;
  2. 可追踪性:指令与事件一一对应,调试时通过打印常量名即可定位协议交互点;
  3. 一致性:Manager 层与处理器层引用同一份常量,杜绝同一指令多处定义导致的不一致。

调试建议:当设置项不生效时,首先核对 ble_method_constants 中指令码是否与设备协议一致,再核对 ble_event_constants 中事件码是否与设备回报一致,最后检查 ble_event_stream 是否注册了对应监听。

核心数据流

设置指令的完整生命周期

sequenceDiagram
    participant UI as Demo UI (example/)
    participant M as ble_device_setting_manager
    participant B as ble_base_manager
    participant D as BLE 设备
    participant S as ble_event_stream

    UI->>M: 调用设置接口(如修改设备参数)
    M->>M: 组装指令(引用 ble_method_constants)
    M->>B: 通过基座下发设置命令
    B->>D: 写入 BLE 特征值
    D-->>S: 设备回报事件(对应 ble_event_constants)
    S-->>UI: 事件回调,刷新界面状态
    UI->>UI: 展示设置结果 / 错误提示

流程要点

  1. 入口在 UI 层:example 工程中的页面调用 Manager 的公开方法,Manager 不直接接触蓝牙特征值细节。
  2. 指令组装在 Manager 层:ble_device_setting_manager 负责把语义化调用翻译成协议指令,指令码取自 ble_method_constants。
  3. 统一下发在基座层:ble_base_manager 负责写特征值、处理写确认,任何管理器都复用这一条已验证通道。
  4. 事件回流走流式通道:设备回报经 ble_event_stream 派发,事件类型由 ble_event_constants 标识,UI 据此刷新。
  5. 失败可观测:任一环节(指令码错误、写失败、事件不匹配、超时)都会在链路中暴露为"下发无响应"或"事件未匹配",配合常量体系即可快速定位是协议问题、连接问题还是监听遗漏。

调试支撑

静态分析:analysis_options.yaml

工程在根目录(code/JieLi_Home_Demo/analysis_options.yaml)与 example 子工程(code/JieLi_Home_Demo/example/analysis_options.yaml)各配置一份 Flutter 静态分析规则。这是"调试"的第一道防线:lint 规则在编译期拦截未使用变量、类型误用、空安全违规等问题,减少运行期调试负担。两份配置独立存在,说明 example 作为独立应用拥有自己的分析基线。

运行时调试:devtools_options.yaml

文件:code/JieLi_Home_Demo/example/devtools_options.yaml。该文件用于配置 Flutter DevTools 的启动选项(如默认打开的服务、调试端口偏好等),是 example 工程运行期调试的入口配置。配合 Flutter 自带的 DevTools,可观察 widget 树、检查 BLE 状态管理对象、跟踪事件流。

独立示例工程:example/

code/JieLi_Home_Demo/example/ 拥有独立的 pubspec.yaml、analysis_options.yaml、devtools_options.yaml,是演示应用的 UI 运行载体。其意义在于:SDK 库(lib/)与演示应用(example/)解耦——调试设置类功能时,可在 example 中单独运行、单独分析,不影响库代码;而库的更新通过 pubspec 依赖关系进入 example。

数据传输调试切入点:ble_transfer_processor

lib/processor/ble_transfer_processor.dart 负责大数据传输的编解码,是排查音频类数据传输问题的核心位置。以下为已验证的实际源码片段,展示了 PCM 数据在传输前的类型归一化处理:

if (pcmList is List<dynamic>) {
  final intList = pcmList.map((e) => e as int).toList();
  return Int16List.fromList(intList);
}

Source: ble_transfer_processor.dart

这段代码的设计意图:从 BLE 通道收到的 PCM 数据可能以 List<dynamic>(平台通道解码产物)形式到达,处理器通过显式 as int 断言与 Int16List.fromList 归一化为 16 位整型列表,保证下游音频管线拿到确定类型的数据。调试提示:若音频出现杂音或长度异常,优先在此处检查元素类型断言与字节序/长度处理是否符合设备协议。

多语言(i18n/l10n)现状与扩展路径

现状评估(基于已扫描源码)

在本次源码探索范围内(code/JieLi_Home_Demo/lib/** 与工程配置),未发现多语言实现痕迹:

  • 对 Locale、localizations、intl、多语言 的搜索仅命中 ble_transfer_processor.dart 中与 i18n 无关的 Int16List 类型名;
  • 未在文件清单中发现 l10n.yaml、*.arb、lib/l10n/ 等 Flutter 国际化标配文件。

结论:该演示应用当前为单一语言(中文 UI)实现,多语言属于待扩展能力,而非既有功能。若目录树中存在未扫描到的 l10n 资源,请以实际仓库为准修正本结论。

扩展路径(基于 Flutter 官方惯例的建议,非源码现状)

若要在本工程引入多语言,标准做法如下,工程结构已具备落地的条件:

  1. 依赖:在 pubspec.yaml 增加 flutter_localizations(SDK)与 intl 依赖,并声明 generate: true 开启代码生成;
  2. 资源:新增 l10n.yaml 与 lib/l10n/app_zh.arb、app_en.arb 等 ARB 文件,维护各语言的文案键值;
  3. 接入:在 example 的 MaterialApp 中配置 localizationsDelegates: AppLocalizations.localizationsDelegates、supportedLocales 与 locale;
  4. 使用:页面文案替换为 AppLocalizations.of(context).xxx 生成方法,Manager 层(纯逻辑)不依赖 UI 文案,无需改动。

此路径与本工程"Manager 层与 UI 层解耦"的架构天然兼容:多语言只影响 example 的 UI 层,lib/ 下的设置/调试逻辑无需改动。

配置选项

工程中与"设置 / 多语言 / 调试"相关的配置文件与作用一览:

配置项 / 文件类型默认形态说明
analysis_options.yaml(根目录)Dart 分析规则随工程提供库代码的静态分析基线(lint 集合)
example/analysis_options.yamlDart 分析规则随工程提供example 独立应用的分析基线
example/devtools_options.yamlDevTools 启动选项随工程提供运行时调试器(DevTools)的选项配置
example/pubspec.yamlFlutter 依赖清单随工程提供example 应用自身依赖,与库解耦
pubspec.yaml(根目录)Flutter 依赖清单随工程提供SDK 库依赖(未在本次扫描中展开具体条目)
l10n 相关(l10n.yaml / *.arb / flutter_localizations)国际化资源不存在当前未实现多语言,扩展路径见上文

各配置文件的具体规则条目与依赖版本请直接查阅对应文件;本次文档基于文件存在性与工程约定描述其作用。

API 参考

因本次探索预算所限,未能读取 Manager 类的完整方法签名。以下为关键入口速查,方法级签名请直接查阅源码;已标记 ✅ 的为本次已验证内容。

设置类入口(文件级)

入口文件职责
设备设置管理器lib/manager/ble_device_setting_manager.dart设备端设置项读写入口
配置管理器lib/manager/ble_config_manager.dart设备配置参数读写入口
基座管理器lib/ble_base_manager.dart统一 BLE 指令下发/通道封装
事件流lib/ble_event_stream.dart设备事件订阅与派发

已验证代码片段

ble_transfer_processor 的 PCM 归一化逻辑(见"调试支撑"节),输入为平台通道解码的 List<dynamic>,输出为 Int16List,返回类型服务于下游音频管线。该片段同时印证了工程"在处理器层做类型收敛"的数据约定。

失败模式、边界与并发

以下内容基于工程架构的推断性分析(具体异常类型以源码为准):

  • 指令下发无响应:设置指令经 ble_base_manager 写入特征值后,若设备未回报对应 ble_event_constants 事件,UI 将停留在等待态。排查顺序:指令码 → 事件码 → 监听注册 → 连接状态。
  • 事件流竞态:多个 Manager 并发设置时,设备回报事件经同一 ble_event_stream 派发;若事件未携带"指令关联标识",回调可能错配到其他设置操作。设计上应保证设置指令串行化或事件携带序列号。
  • 类型边界:List<dynamic> → Int16List 的转换中,若平台通道返回非 int 元素,as int 断言将抛类型错误——这是数据传输层的已知边界,调试时优先检查解码产物。
  • BLE 低带宽约束:设置类指令应避免高频下发;大数据传输(PCM)走 ble_transfer_processor 专用路径,不应与设置指令混用通道语义。
  • 多语言缺失的边界:当前 UI 文案硬编码为中文,若未来接入多语言,需全量替换 example 层文案;Manager 层不受影响。

性能与运维

  • 热路径:BLE 特征值写入与事件流派发是设置链路的热路径,Manager 层应保持轻量,避免在回调中做耗时操作。
  • 调试手段:借助 example/devtools_options.yaml 配置的 DevTools 观察事件流与状态对象;借助常量体系打印语义化指令/事件名,快速定位协议交互点。
  • 可维护性:指令码/事件码全部集中于 constant/ 下,协议升级时只需更新常量文件与对应 Manager 逻辑,是工程最重要的运维抓手。

扩展点

  1. 新增设置能力:遵循既有 Manager 模式——在 lib/manager/ 新建 ble_xxx_manager.dart,复用 ble_base_manager 下发通道;新增指令码进 ble_method_constants.dart,新增事件码进 ble_event_constants.dart,并在 ble_event_stream 注册监听。
  2. 多语言扩展:按"多语言现状与扩展路径"一节落地 l10n,仅改动 example 层。
  3. 调试增强:在 example/devtools_options.yaml 扩展 DevTools 选项;在 ble_transfer_processor 增加传输统计日志以观测大数据链路。

Related Links

  • ble_device_setting_manager.dart
  • ble_config_manager.dart
  • ble_base_manager.dart
  • ble_event_stream.dart
  • ble_transfer_processor.dart
  • constant/constants.dart
  • constant/ble_method_constants.dart
  • constant/ble_event_constants.dart
  • example/devtools_options.yaml
  • example/analysis_options.yaml
  • analysis_options.yaml
Prev
应用框架与交互组件