我的应用程序可以通过普通耳机控制。它只是覆盖“onKeyDown”。但是蓝牙耳机的关键事件没有被捕获 - 为什么?或者如何捕捉蓝牙按键事件?
如果我按下耳机上的按钮,“日志猫”会显示以下内容:
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)
我也尝试处理媒体按钮操作,但这不起作用。我的想法是一个免费的可配置键映射:用户选择“设置键”我的应用程序在所有键(硬件、媒体按钮、蓝牙耳机)上听到然后用户按下一个键并将事件/键代码存储在 config.xml 中。
总结不起作用答案: 音量按钮必须由“VOLUME_CHANGED_ACTION”捕获。问题是这个意图被广播到其他应用程序并且 abortBroadcast() 不起作用(它仅适用于“有序”广播)。另一个问题是有线耳机和电话上的按键触发 onReceive() 两次(为什么?)蓝牙耳机触发一次。下一个问题是蓝牙耳机的第三把钥匙。它触发语音命令(s-voice 在 s3 上开始),我试图捕捉许多不同的意图,但我无法“接收”这个按钮按下并且不知道为什么。最后,我想捕获各种按钮,并且不希望它们被其他应用程序处理(例如使用 onKeyDown 并返回 true)。