框架的一些部分对我来说还不是很清楚。我熟知输入事件的流程(内核 - > Eventhub - > InputReader - > InputDispatcher - > ...)。Android键处理(框架)
形势
(要求:处理输入键在不改变Android框架) 我想处理从设备(键盘/游戏手柄/控制器/ ...),但未来的关键事件有是一些要求。首先,我不想更改Android框架。这意味着,我不想扩展WindowManagerPolicy
及其功能,如interceptKeyBeforeDispatching
,其中家庭密钥正在处理。这将导致关键事件被分派到应用程序层,这很好。缺点是,我在这里有另一个棘手的要求。 示例:当我在玩愤怒的小鸟时,我在连接的输入设备上按下GoToAlpha按钮时,Alpha应用程序必须启动。愤怒的小鸟不知道哪个按钮是GoToAlpha,不会处理/识别它,并且例如没有意图广播来启动我的Alpha应用程序。
问题
有没有一种方式,它被分派后处理我的(自定义)按键事件,知道在前台的应用程序无法处理的关键?
我的(失败的)解决方案
创建一个将处理的关键事件的服务。这是不可能的,因为像愤怒的小鸟这样的应用程序不会绑定到我的服务上,关键事件不会被我的服务所捕获。如果我错了,请提供更多信息:)。
创建一个外部库,允许我的应用程序的活动从我自己的ActivityBase继承。所有关键事件和默认行为都可以在这里处理。缺点是,现有的应用程序不会支持我的自定义关键事件,因为它们不使用库。
扩展框架将在我眼中是最干净的解决方案,但这将导致不符合我的要求。
任何帮助或有用的信息,将不胜感激
额外
如果第一个问题可以在这样或那样的..可以解决我想 定制我的GoToAlpha按钮后面的
Intent
。这意味着..通过 默认的Alpha应用程序将启动,但用户有 定制它后,Beta应用程序将从现在开始..任何 的想法?
感谢
如果可以从其他应用程序捕获关键事件,这不是很奇怪吗?我想这会是一个安全风险 – Boy 2012-08-14 08:25:39
是真的。一旦关键事件离开框架,它将只发送到一个应用程序并在那里处理。如果不是,则返回到框架。这意味着没有解决方案可以满足我的要求? – DroidBender 2012-08-14 08:32:13
在我看来,仅仅因为安全问题,可能没有办法:处理关键事件,而您的应用程序没有焦点。也许唯一的办法是如果你实现一个Android键盘(我没有知道这一点)?这应该能够处理关键事件(当你选择第三方键盘时,用户也会指出这种安全风险) – Boy 2012-08-14 08:45:11