如何在Android TV Remote上禁用主页按钮

时间:2017-12-30 09:30:28

标签: android android-homebutton

有几篇SO帖子已经讨论过类似的问题,但我觉得它们没那么相关或太复杂。我正在使用具有遥控器的Android TV,它应该在企业环境中使用。用户不应该有太多控制权,因此我必须限制遥控器上的一些可用功能 我创建了一个简单的应用程序,它覆盖onKeyDown()并使用以下代码显示按下的键:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    //Read the input and display its code
    switch(keyCode) {
        case KeyEvent.KEYCODE_HOME:
            mTextView.setText("Home");
            break;
        default:
            char c = event.getDisplayLabel();
            String code = String.valueOf(keyCode);
            String displayText = c + " " + keyCode;
            mTextView.setText(displayText);
            mTextView.setBackgroundColor(mColor^=Color.GREEN);

    }

    return true;
}

我能够捕获大部分键并覆盖其行为,特别是131,132,133和134(分别用作遥控器上的媒体,电视,Web和应用程序快捷方式)。
enter image description here
enter image description here

唯一的问题是AOSP源代码(KeyEvent.java)所说的Home按钮是系统特定的:

* This key is handled by the framework and is never delivered to applications. */
    public static final int KEYCODE_HOME            = 3;

让我感到震惊的解决方案是扩展KeyEvent并覆盖方法isSystem(),以便在所选键为KEYCODE_HOME时返回false。但是,这个方法定义为final,我无法覆盖它。有任何想法吗?

1 个答案:

答案 0 :(得分:1)

您需要使用

 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

在清单中和

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    Toast.makeText(this, ""+event.getKeyCode(), Toast.LENGTH_SHORT).show();
    return false;

    return super.dispatchKeyEvent(event);
}

我认为控制主键是3

我希望有所帮助