JoeDevHeadphoneControls 扩展:检测耳机(有线 / 蓝牙)物理按键

« 返回首页

JoeDevHeadphoneControls 扩展

检测用户按下耳机上的物理按键(有线耳机与蓝牙耳机都支持),把按下的键通过 HeadsetButtonPressed 事件返回,可作为逻辑配合 App Inventor 内置的 Player 等播放器做耳机线控。

作者已在 Beats Studio 3(原帖误拼为 Beads)与 Apple EarPods 上实测通过;不确定是否适配市面上所有耳机。

下载

joejsanz.joedevheadphonecontrols.aix(v1.1)

HeadphoneControls.aia - 原作者完整演示项目

HeadphoneControlsTest.aia - 精简测试项目(仅本扩展与播放器)

基本信息

  • 版本:v1.1
  • 发布时间:2025-11-30(首发),v1.1 更新于 2025-12-02
  • JDK:11
  • 最低 API 级别:21
  • 构建方式:FAST-CLI v5.3.2-premium
  • 体积:aix 约 10.3KB;示例项目 HeadphoneControls.aia 约 2.2MB、HeadphoneControlsTest.aia 约 2.1MB(仅含本扩展与播放器的精简版)

截图

StartHeadphoneControl 方法

StartHeadphoneControl 方法

StopHeadphoneControl 方法

StopHeadphoneControl 方法

HeadsetButtonPressed 事件

HeadsetButtonPressed 事件

方法

StartHeadphoneControl开启耳机按键检测()
开启耳机按键检测(v1.0 方法名,单数)。
StopHeadphoneControl停止耳机按键检测()
停止耳机按键检测:清理 MediaSession 并释放 AudioFocus(v1.0 方法名,单数)。
StartHeadphoneControls开启耳机按键检测()
开启耳机按键检测(v1.1 新增,复数,可更精细地控制何时激活)。
StopHeadphoneControls停止耳机按键检测()
停止耳机按键检测(v1.1 新增,复数)。

事件

HeadsetButtonPressed耳机按键按下时(按键动作)
耳机上的按键被按下时触发。buttonAction 取值:Play、Pause、Play_Pause、Stop、Next、Previous、Fast_Forward、Rewind、Call_Button(中央键)。

使用注意(重要,来自作者与社区实测)

  • 必须在 Screen 初始化时调用 Start:作者专门确认过”你是在初始化时加的这个功能吗?”——放在初始化事件里才能生效。
  • App 内必须先有声音在播:App 拿到 AudioFocus 优先级后才能接管耳机按键;App 内没有播放音频时按键检测无效。先从 App 内开始播放,之后耳机键才可用。
  • 只有中央键的单键耳机:中央键交替返回 Play / Pause(社区成员 Marco_M 实测确认)。
  • WebView 抢占焦点会令检测失效:Marco_M 的案例里,一个定时器打开隐藏 WebView 加载电台网页后耳机键失灵,禁用那组积木后恢复——作者定位为”有东西在运行并阻塞了它”。
  • v1.0 曾因移除了 MediaService 扩展自动申请的权限而失效,v1.1 补上了 FOREGROUND_SERVICE 权限,可独立使用、不再受其它扩展控制。

版本更新

v1.1(2025-12-02)

  • Manifest 补上缺失的 FOREGROUND_SERVICE 权限:独立使用(不依赖其它扩展)也能正常工作。
  • 新增 StartHeadphoneControls / StopHeadphoneControls 两个方法(复数命名),更精细地控制耳机检测的启停时机。

版权信息

本文档内容依据原作者发布页面整理翻译,版权归原作者所有。

  • 原作者:Joe J. Sánchez(Joejsanz)
  • 原始网址:https://community.appinventor.mit.edu/t/headphonecontrols-detects-when-the-user-presses-the-physical-buttons-on-the-headphones-both-wired-and-bluetooth/160553
  • 发布日期:2025年11月30日
文档反馈