无法覆盖Amazon Fire Tv Stick遥控器上的硬件菜单按钮

时间:2015-05-13 19:32:16

标签: android override keycode amazon-fire-tv

Amazon Fire Tv Stick在它的遥控器上有一个专用菜单按钮,我想提供功能但无法覆盖。我能够覆盖遥控器上的每个其他按钮,但不能覆盖菜单按钮。我知道菜单按钮有效,因为它仍会显示默认的Android选项菜单和MenuFragment。这是我的代码,以覆盖菜单按钮。

public boolean onKeyUp (int keycode, KeyEvent event) {
    if(keycode == KeyEvent.KEYCODE_MENU) {
        Toast.makeText(this, "menu pressed", Toast.LENGTH_SHORT).show();
        return true;
    }
return super.onKeyUp(keycode, event);
}

我认为这可能不起作用的唯一原因是我的mainActivity中的其他内容也会覆盖菜单按钮,也许是为了运行选项菜单。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您可能已经更新了SDK安装中的支持库,这是Google上的一个已知错误。可能会覆盖该特定按钮的行为。

我相信这将通过未来版本的库来修复。 https://code.google.com/p/android/issues/detail?id=159795

现在有什么解决方案?

你可以: 在Gradle中,打开build.gradle文件并进行以下修改:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    //    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:appcompat-v7:21.0.3'
}

如果支持库生成错误(下面有一条波浪形的红线),请确保您的targetSDKVersion为19或更低。

或者 https://stackoverflow.com/a/29852304/2837959

答案 1 :(得分:0)

原来这可以在当前的appcompat版本中使用。

@Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        int keyCode = event.getKeyCode();
        int action = event.getAction();
        boolean isDown = action == 0;

        if (keyCode == KeyEvent.KEYCODE_MENU) {
            return isDown ? this.onKeyDown(keyCode, event) : this.onKeyUp(keyCode, event);
        }

        return super.dispatchKeyEvent(event);
    }