Android 覆盖Amazon Fire Tv Stick remote上的硬件菜单按钮时出现故障

Android 覆盖Amazon Fire Tv Stick remote上的硬件菜单按钮时出现故障,android,overriding,keycode,amazon-fire-tv,Android,Overriding,Keycode,Amazon Fire Tv,亚马逊Fire电视棒在其遥控器上有一个专用的菜单按钮,我想提供功能,但无法覆盖。我可以覆盖遥控器上的所有其他按钮,但不能覆盖菜单按钮。我知道菜单按钮可以工作,因为它仍然会显示默认的Android选项菜单和菜单片段。这是我覆盖菜单按钮的代码 public boolean onKeyUp (int keycode, KeyEvent event) { if(keycode == KeyEvent.KEYCODE_MENU) { Toast.makeText(this, "me

亚马逊Fire电视棒在其遥控器上有一个专用的菜单按钮,我想提供功能,但无法覆盖。我可以覆盖遥控器上的所有其他按钮,但不能覆盖菜单按钮。我知道菜单按钮可以工作,因为它仍然会显示默认的Android选项菜单和菜单片段。这是我覆盖菜单按钮的代码

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中的其他内容也覆盖了菜单按钮,可能是为了运行选项菜单


谢谢你的帮助

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

我相信这将在未来版本的库中得到解决。

现在的解决方案是什么

你可以: 在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或更低


结果表明,这将在当前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);
    }

我注意到在Amazon示例中,它们覆盖了onKeyDown而不是OnKeyUpposable复制: