自拍遥控器在 Android 中显示为蓝牙键盘,对吗?或者一般作为 HID(人机接口设备)。
如果是这种情况,请添加到 Activity 的onCreate()
;
takeKeyEvents(true);
这是解释的在文档中:
要求关键事件参与此活动。如果您的
Activity 没有具有焦点的视图,但 Activity 仍需要
处理关键事件的机会。
覆盖onKeyUp()
(在您的活动中)并将一些操作分配给您要使用的键:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
Log.d(this.getClass().getName(), "KEYCODE_MEDIA_PLAY_PAUSE");
// Do something...
return true;
case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
Log.d(this.getClass().getName(), "KEYCODE_MEDIA_PREVIOUS");
// Do something...
return true;
case KeyEvent.KEYCODE_MEDIA_NEXT:
Log.d(this.getClass().getName(), "KEYCODE_MEDIA_NEXT");
// Do something...
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
Log.d(this.getClass().getName(), "KEYCODE_VOLUME_DOWN");
// Do something...
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
Log.d(this.getClass().getName(), "KEYCODE_VOLUME_UP");
// Do something...
return true;
case KeyEvent.KEYCODE_ENTER:
Log.d(this.getClass().getName(), "KEYCODE_ENTER");
// Do something...
return true;
default:
return super.onKeyUp(keyCode, event);
}
}
The onKeyUp()
method 已解释:
当释放按键且未由任何视图处理时调用
活动内部。例如,当光标按下时按键
在 TextView 内部不会触发该事件(除非它是
导航到另一个对象)因为 TextView 处理它自己的键
按下。
默认实现处理 KEYCODE_BACK 来停止活动
然后回去。
只需让系统处理您不想捕获的任何键即可。这是由default
block.
只需检查来自遥控器的键码是什么并删除不必要的情况。这些只是遥控器可能发送的一些候选键码。
当然,任何适用于一般操作键盘的内容也适用于遥控器。 (假设它是 HID。但通常都是这样。带按钮的蓝牙耳机则完全不同。)
这将允许您在自己的应用程序中使用遥控器。我不明白为什么应该涉及 BroadcastReceivers 或 onClickListeners,但也许我错过了这一点。
如果您想要在后台运行并将按键事件发送到其他应用程序/将遥控器的按键重新映射到其他按键代码以触发系统服务,那么这也是一个不同的故事。