
1. 通用蓝牙音箱媒体按键标准蓝牙音箱上的媒体控制键播放/暂停、音量/-、上一曲/下一曲❯ 2. 蓝牙耳机 品牌音箱带多媒体按键的蓝牙耳机接听/挂断、切歌、音量调节以及JBL、Bose等品牌特殊按键3. 所有 HID 蓝牙设备如果能抓到所有按键最好比如键盘、游戏手柄、遥控器等不限于音箱App 如何与蓝牙音箱建立连接❯ 1. 自动扫描连接进入 App 后自动扫描并连接附近蓝牙设备无需手动配对2. 手动选择设备显示附近设备列表让用户手动点击选择要监听的设备3. 监听已配对设备用户先在系统设置里配对好App 直接监听已配对的设备你希望界面上显示哪些信息1. 键值 名称映射清单原始 HID Usage ID 按键名称映射如 0xE9 → Volume Up简单清单列表❯ 2. 完整信息面板 历史记录显示设备信息、连接状态、按键历史记录、每个按键的时间戳和频率统计3. 全部 日志导出以上都要再加一个日志导出功能方便分析复杂按键组合4. Type something.───────────────────────────────────────────────────────────────────────────────────────你倾向于哪种技术路线来捕获蓝牙设备的按键1. MediaSession API推荐通过 MediaSession API 监听媒体按键事件KEYCODE_MEDIA_PLAY_PAUSE、KEYCODE_MEDIA_NEXT 等标准按键都有实现简单但拿不到原始 HID 报文2. Accessibility Service通过 Android Accessibility Service 捕获全局按键事件能拿到更多低级别的按键信息但需要用户在系统设置中开启无障碍权限❯ 3. 两步走先 MediaSession 再扩展先做 MediaSession 方案覆盖通用按键后续再扩展 Accessibility 方案4. Type something.需求总结┌──────────┬─────────────────────────────────────────────────────────────┐│ 维度 │ 决定 │├──────────┼─────────────────────────────────────────────────────────────┤│ 目标设备 │ 蓝牙耳机 品牌音箱JBL、Bose 等 │├──────────┼─────────────────────────────────────────────────────────────┤│ 连接方式 │ 监听已配对设备不处理配对 │├──────────┼─────────────────────────────────────────────────────────────┤│ 显示内容 │ 设备信息 连接状态 按键历史时间戳 按键统计频率 │├──────────┼─────────────────────────────────────────────────────────────┤│ 技术路径 │ 两步走先用 MediaSession API再扩展 Accessibility │├──────────┼─────────────────────────────────────────────────────────────┤│ 阶段 │ Phase 1 → MediaSession 覆盖通用按键Phase 2 → 扩展深度捕获 │└──────────┴─────────────────────────────────────────────────────────────┘---方案对比方案 A推荐Flutter Android Platform Channel┌─────────────────────────────────────────────────┐│ Flutter UI Layer ││ ┌─────────┐ ┌──────────────┐ ┌────────────┐ ││ │ 设备面板 │ │ 按键历史列表 │ │ 统计图表 │ ││ └────┬─────┘ └──────┬──────┘ └─────┬──────┘ ││ └───────────────┼────────────────┘ ││ │ ││ Flutter Plugin (MethodChannel) │└──────────────────────┼──────────────────────────┘│┌──────────────────────┼──────────────────────────┐│ Android Native Layer ││ ┌──────────────────┼──────────────────────┐ ││ │ MediaSessionService (监听按键) │ ││ │ ┌─────────────────────────────────┐ │ ││ │ │ MediaSession.Callback │ │ ││ │ │ onMediaButtonEvent → 解析 HID │ │ ││ │ └─────────────────────────────────┘ │ ││ │ ┌─────────────────────────────────┐ │ ││ │ │ BluetoothBroadcastReceiver │ │ ││ │ │ ACTION_ACL_CONNECTED/DISCONNECTED│ │ ││ │ └─────────────────────────────────┘ │ ││ └─────────────────────────────────────────┘ │└─────────────────────────────────────────────────┘- 优点架构清晰Flutter 和原生层职责分明按键映射表维护在 Dart 侧方便扩展后期加 Accessibility 只需扩展 Native 层- 缺点需要自己写 Platform Channel 桥接代码