[有几个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(分别用作遥控器上的Media,TV,Web和App快捷键)。
唯一的问题是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。但是,此方法是最终定义的,我无法覆盖它。有任何想法吗?
您需要使用
<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
希望对您有所帮助