我的应用可以通过普通耳机进行控制。它简单地覆盖了“onKeyDown”方法。但是蓝牙耳机的按键事件无法被捕获 - 为什么?或如何捕获蓝牙按键事件?
如果我按下耳机上的按钮,“日志cat”显示如下:
Bluetooth AT recv(3043): AT+VGS=15
AudioPolicyManagerBase(13654): FM radio recording off
AudioService(2261): sendVolumeUpdate, isKeyguardLocked...Not to update Volume Panel.
VolumePanel(2261): change volume by MSG_VOLUME_CHANGED
VolumePanel(2261): onVolumeChanged(streamType: 6, flags: 0)
VolumePanel(2261): Call setChangeSeekbarColor(false)
我也尝试处理媒体按钮的操作,但这并没有起作用。我的想法是一个自由配置的键映射:用户选择“设置键”,我的应用程序监听所有键(硬件、媒体按钮、蓝牙耳机),然后用户按下一个键,事件/键代码就会存储在配置中。
总结不起作用的答案:音量按钮必须通过“VOLUME_CHANGED_ACTION”来捕获。问题是这些意图被广播到其他应用程序,并且abortBroadcast()不起作用(它仅适用于“有序”的广播)。另一个问题是有线耳机和手机上的按键会触发两次onReceive()(为什么?)而蓝牙耳机则只触发一次。接下来的问题是蓝牙耳机上的第三个键,它会触发语音命令(s3上启动s-voice),我尝试了许多不同的意图来解决这个问题,但我无法“接收”这个按钮的按下事件,也不知道原因。最后,我想捕获所有类型的按钮,并希望它们不会被其他应用程序处理(例如使用onKeyDown并返回true)。