让我首先解释我的问题 -
我正在开发一个位于系统活动(com.google.tv.player.PlayerActivity)和用户空间之间的应用程序。
当我按下 MENU 按钮时,系统活动会发生某种行为。由于中间有我新部署的应用程序,我正在努力将 MENU 键事件发送到“我上方的活动”。否则,它只会被我的应用程序拦截和使用。
我没有提及该活动。我已经检查了它的旧代码,以确定按下菜单按钮最终会调用void openOptionsMenu();
,并且大多数尝试都没有结果。这是我尝试过的简短列表,我按下 MENUMyActivity.onKeyDown()
并尝试执行以下操作
super.onKeyDown(keyEvent);
让我真的无处可去。dispatchKey
根据使用情况分派导致堆栈溢出的密钥- 调度事件
menuEvent.dispatch((Activity) getRefByReflection());
- 抓住 WindowManager 并调度它的关键。
- 显然是压倒一切
dispatchKey
的,这刚刚以堆栈溢出结束:)
我在网上读到有/曾经有一种方法可以通过 PID 发送密钥 - 我可以获得玩家的 pid,但缺少用于发送密钥的方法!我根本不dispatchKey(KeyEvent event, int recvPID, int recvUID)
知道他们似乎在使用。
我也知道我会得到一些虚假的用户输入是不稳定的,重构按钮行为比模拟按下它更好,我同意但是,我什至无法获得源代码,更不用说改变它。扭转它是一种选择,如果只是为了知道我需要反省哪些成员。
对我来说,似乎根本没有办法将按键作为通路路由并让它沉入下面的活动,所以我真的必须以某种方式发送/调度它。任何帮助将非常感激。
再一次,我正在寻找一种允许按键传递的方法,所有这些都是为了打开一个我无法通过我的代码以编程方式访问的菜单。
最后一个未完全探索的选项是InputManager
'injectInputEvent
方法 - 但如果没有在任何地方“引导”它的方法,我不知道彻底探索该场所是否会结出果实。话又说回来,这是唯一需要探索的东西。
可能值得注意的是,反射方法失败是因为
Caused by: java.lang.ClassNotFoundException: Didn't find class
"com.google.tv.player.PlayerActivity" on path: /system/app/myAPK.apk
(希望)这是某种类加载器问题?
在此期间,我将尽快在这个问题上奖励 100 赏金 - 请帮助 :) 我搜索了如此高和低的东西,并尝试了所有建议的东西和我能想到的东西。此刻我真的很难过。