我有一个模拟按键的输入法:
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, event));
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, event));
使用这种方法,我可以使用KeyEvent.KEYCODE_MENU
打开设备上的菜单。完成后,我尝试发送KeyEvent.KEYCODE_DPAD_UP
和KeyEvent.KEYCODE_DPAD_DOWN
来浏览菜单,但重点仍然放在后台的活动上。
因此,例如,当我在启动器处时,我会打开菜单,但当我向上或向下按时,设备会浏览主屏幕上的应用程序,而不是菜单中的选项。
我用硬件键盘重复了同样的步骤,然后焦点像预期的那样跳到菜单上,所以我觉得这也应该能够模拟。
您的keyevent附加到应用程序的主活动。我可以想到的一种方法是,每当用户在键盘上有输入时,注册对活动的回调。活动将检查是否打开菜单(这可以通过标志来完成)。如果是,它将更新菜单中所选内容的位置。