gpt4 book ai didi

Android 按键处理(框架)

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:42 24 4
gpt4 key购买 nike

框架的某些部分我还不是很清楚。我很熟悉输入事件的流程(内核 -> Eventhub -> InputReader -> InputDispatcher -> ...)。

情况

(要求:在不更改 Android 框架的情况下处理输入键。)我想处理来自设备(键盘/游戏 handle / Controller /...)的关键事件,但有一些要求。其一,我不想更改 Android 框架。这意味着,我不想扩展 WindowManagerPolicy 及其处理 home-key 的功能,例如 interceptKeyBeforeDispatching。这将导致键事件被分派(dispatch)到应用层,这很好。缺点是,我在这里还有另一个棘手的要求。示例:当我在玩《愤怒的小鸟》时,按下连接的输入设备上的 GoToAlpha 按钮,Alpha 应用程序必须启动。 Angry Birds 不知道 GoToAlpha 是哪个按钮,不会处理/识别它,例如不会广播启动我的 Alpha 应用程序的 Intent 。

问题

在知道前台应用程序无法处理按键的情况下,是否有一种方法可以在发送后处理我的(自定义)按键事件?

我的(失败的)解决方案

  • 创建将处理关键事件的服务。这是不可能的,因为像 Angry Birds 这样的应用程序不会绑定(bind)到我的服务,并且不会在我的服务中捕获关键事件。如果我错了,请提供更多信息:)。

  • 创建一个外部库,我允许我的应用程序的 Activity 从我自己的 ActivityBase 继承。所有关键事件和默认行为都可以在这里处理。缺点是,现有应用程序不支持我的自定义按键事件,因为它们不使用该库。

  • 扩展框架在我看来是最干净的解决方案,但这将导致无法满足我的要求。

如有任何帮助或有用的信息,我们将不胜感激

Extra

If the first question could be solved on one way or another.. I want to customize my Intent behind the GoToAlpha-button. This means.. By default the Alpha-application will be started but after the user has customized it, the Beta-application will be started from now on.. Any thoughts?

谢谢

最佳答案

感谢维克多的评论。

使用 InputMethodService 不会为我提供足够的自由度和功能来处理我的问题。

我的解决方案/妥协

在Android Framework 中,有一个PhoneWindowManager 负责处理InputEvents。由 SystemServer 启动的 WindowManagerService 是该管理器的所有者并创建一个实例。

通过创建我自己的自定义 WindowManager 并让它继承自 Android 的 PhoneWindowManager,我不会丢失任何默认功能,这允许我在此类中添加我自己的实现。这个结果是向框架添加一个新文件,并且只更改 Android 框架内的一行:WindowManagerService 不会创建 PhoneWindowManager,但会创建一个 CustomPhoneWindowManager (扩展 PhoneWindowManager)。

如果有人看到更好的解决方案或对我的妥协有任何具体想法,请不要犹豫发表评论。 :)

关于Android 按键处理(框架),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11947653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com