gpt4 book ai didi

java - 安卓/Linux : Log (power) key usage on lower system level

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:38 25 4
gpt4 key购买 nike

我不是在搜索一段特定的代码,而是在寻找从哪里开始研究的提示。对于经验丰富的 Android 开发人员来说,我想做的可能是一件容易的事。

我只是想在比 Dalvik 引擎更低的级别上记录所有硬件按钮交互。我是 Android 开发的新手,我从来没有在 Linux/Unix 基础上开发过,但我在 C 方面的经验很少。

我经常发现有人问他们如何在他们的应用程序中使用电源按钮,我发现通常这是不可能的,或者至少不打算这样做,因为系统本身会捕获电源按钮的按下,并且不会将其传递给在 Java VM 中运行的应用程序或服务(与按下音量控制按钮不同,您可以为其注册监听器的关键事件)。

但是,我想编写一个简单的过程或任何适合记录所有按钮按下的过程(音量控制、电源按钮或设备上可用的任何硬件按钮)。

现在,由于我对这个主题还很陌生,而且此刻我的知识有限,所以我的第一个想法是使用 linux 进程或内核扩展来完成这项工作。稍后我可能想填充我自己的消息、事件或任何我可以通过 JNI(如果我理解正确的话)在应用程序或后台服务中接收的内容。

所以这是我的问题:我需要做什么才能捕获硬件按钮交互并将它们用于我自己的目的(记录文本消息)而不干扰默认系统功能?库、进程、内核扩展或我还没有想到的完全不同的东西?非常感谢任何想法或提示。

亲切的问候扬蒂勒曼

最佳答案

在我做了更多研究之后,我发现 Android 的 PhoneWindowManager.java 方法 interceptKeyBeforeDispatching 是我可以 Hook 的地方。

现在您要么必须更改此类并编译您自己的系统版本,要么您可以使用 xposed 框架(在 Root设备上)及其方法 Hook 来获得事件通知。

我使用 hooks beforeHookedMethod() 方法来检查我感兴趣的 KeyEvent 事件。据我所知,我可以拦截 KeyEvent(例如 KeyEvent.KEYCODE_POWER)并执行我自己的代码,但仍然让系统决定如何处理事件。

我什至可以检查模式(例如,按下 3 到 5 秒,然后短按不到 1 秒)来执行我的代码。按住电源 5 秒钟,系统仍然会提示我关闭或重启设备,但我的代码也会执行。

关于java - 安卓/Linux : Log (power) key usage on lower system level,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36996882/

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