框架的某些部分对我来说还不是很清楚。我对输入事件的流程(内核 -> Eventhub -> InputReader -> InputDispatcher -> ...)非常熟悉。
情况
(要求:在不更改 Android 框架的情况下处理输入键。)
我想处理来自设备(键盘/游戏板/控制器/...)的键事件,但有一些要求。一方面,我不想更改 Android 框架。这意味着,我不想像处理 home 键的地方WindowManagerPolicy
那样扩展 及其功能。interceptKeyBeforeDispatching
这将导致关键事件被分派到应用层,这很好。缺点是,我这里还有一个棘手的要求。示例:当我玩 Angry Birds 并按下连接的输入设备上的 GoToAlpha 按钮时,必须启动 Alpha 应用程序。愤怒的小鸟不知道 GoToAlpha 是哪个按钮,不会处理/识别它,例如不会广播任何意图来启动我的 Alpha 应用程序。
问题
有没有办法在我的(自定义)键事件被调度后处理它,知道前台的应用程序无法处理键?
我的(失败的)解决方案
创建一个将处理关键事件的服务。这是不可能的,因为像 Angry Birds 这样的应用程序不会绑定到我的服务,并且关键事件不会被我的服务捕获。如果我错了,请提供更多信息:)。
创建一个外部库,允许我的应用程序的活动从我自己的 ActivityBase 继承。所有关键事件和默认行为都可以在这里处理。不利的一面是,现有应用程序将不支持我的自定义键事件,因为它们不使用该库。
在我看来,扩展框架是最干净的解决方案,但这将导致无法满足我的要求。
任何帮助或有用的信息将不胜感激
额外的
如果第一个问题可以以某种方式解决.. 我想自定义我
Intent
的 GoToAlpha 按钮。这意味着.. 默认情况下,Alpha 应用程序将启动,但在用户自定义后,Beta 应用程序将从现在开始.. 有什么想法吗?
谢谢