有几篇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和应用程序快捷方式)。
唯一的问题是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,我无法覆盖它。有任何想法吗?
答案 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
我希望有所帮助