安卓:来自安卓盒子遥控器的按键事件

8

我想知道如何从Android TV Box遥控器中捕获按键事件?

例如,当我点击遥控器上的OK按钮时,我希望弹出菜单。并且我想要捕获遥控器上的下一个/返回键事件。

我应该使用Android的KeyEvent类吗?如果是,我该如何实现?

我发现了这个函数,但我真的无法理解它。

 @Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_A:
        {
            //your Action code
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}

Thanks in advance.

2个回答

4
你应该在dispatchKeyEvent上捕获关键事件,具体请参考此链接
@Override
public boolean dispatchKeyEvent(KeyEvent event) {

    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        Log.e(TAG, "Key down, code " + event.getKeyCode());

    } else if (event.getAction() == KeyEvent.ACTION_UP) {
        Log.e(TAG, "Key up, code " + event.getKeyCode());
    }

    return true;
}

编辑: 首先,您需要了解您的遥控器的键位映射(对于所有类型的Android电视盒子来说,它们并不相同),上面的代码将帮助您了解您在遥控器上按下的键的代码。例如,当我按下遥控器上的BACK按钮时,我得到了3的键码。 然后,我想当按下返回键时,会显示一个Toast消息:

@Override
public boolean dispatchKeyEvent(KeyEvent event) {

    // You should make a constant instead of hard code number 3.
    if (event.getAction() == KeyEvent.ACTION_UP && event.getKeyCode == 3) {
        Toast.makeText(this, "Hello, you just press BACK", Toast.LENG_LONG).show();

    } 
    return true;
}

啊哈,非常感谢。那中间的OK按钮呢?我该如何捕捉它? - strategos
这段代码考虑了智能手机的按键事件,但我只想从遥控器获取。有什么解决方案吗? - strategos
不,对于所有运行Android的设备来说都是一样的,无论是智能手机还是Android电视盒子。 附:我正在开发Android机顶盒应用程序。 - Tien
1
@Tien 是的,问题也出在应用兼容性上。如果有人遇到同样的问题,这里有答案:https://dev59.com/8V0a5IYBdhLWcg3w3L8-#29852304 - Dima
1
@Tien:你能帮我回答一下我的问题吗?http://stackoverflow.com/questions/42975806/is-it-possible-to-receive-android-tv-remote-key-events-without-activity - saa
显示剩余11条评论

0
Tien的回答有一个小错误。event.getKeyCode缺少括号,Toast.LENG_LONG缺少TH。以下是已更正的代码:
@Override public boolean dispatchKeyEvent(KeyEvent event) {
// You should make a constant instead of hard code number 3.
if (event.getAction() == KeyEvent.ACTION_UP && event.getKeyCode() == 3) {
    Toast.makeText(this, "Hello, you just press BACK", Toast.LENGTH_LONG).show();

} 
return true;

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接