我在AndroidTV上有一个非常奇怪的错误。
我正在应用中打开一个AlertDialog
,在10-20%的情况下,我完全失去了远程输入焦点。全局处理的按钮(例如HOME)可以正常工作,但是DPAD,OK和其他远程按钮什么也不做。
在logcat中,我看到了:
W: Cancelling event due to no window focus: KeyEvent { action=ACTION_UP, keyCode=KEYCODE_DPAD_LEFT, scanCode=105, metaState=0, flags=0x28, repeatCount=0, eventTime=4748412, downTime=4748300, deviceId=9, source=0x301 }
W: Dropping event due to no window focus: KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_DPAD_LEFT, scanCode=105, metaState=0, flags=0x8, repeatCount=0, eventTime=4748468, downTime=4748468, deviceId=9, source=0x301 }
W: Cancelling event due to no window focus: KeyEvent { action=ACTION_UP, keyCode=KEYCODE_DPAD_LEFT, scanCode=105, metaState=0, flags=0x28, repeatCount=0, eventTime=4748570, downTime=4748468, deviceId=9, source=0x301 }
我检查了adb shell dumpsys window
输出是否有焦点异常,但没有发现任何异常。
我的猜测是焦点被某些东西挡住了,但是我不知道这可能是什么。我将不胜感激。
答案 0 :(得分:0)
没有看到您的代码,但这可能是竞争条件问题,因为您提到这是“ 10-20%的情况”。您可以通过两种方法来解决。 1.尝试在活动中的onKeyDown或onKeyUp方法中添加日志,以查看当您按下遥控器上的按钮时会发生什么。 2.启动对话框时,在对话框中调用“ yourview.requestFocus()”。请注意,您的视图是对话框的根视图,只需更改为您的情况即可。
答案 1 :(得分:0)
初始化按钮,并在按钮上设置按键监听器
yourButton.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
// your code here
return true;
} else if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
return true;
}
else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
return true;
}
else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
return true;
}
else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
return true;
}
else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
return true;
}
}
return false;
}
});
一些要注意的要点:
要在设备上执行操作,请使用DPAD中心按钮,而在模拟器上进行测试时,请使用KEYCODE Enter按钮。
您的avd应该启用了dpad。您可以在avd配置中进行设置。