2012-04-21 127 views
14

对于这个问题我要引用谁得到了他们的问题没有回应其他用户音量键的使用方法:检查时,屏幕关闭

我已经写了使用硬件音量按钮的Andoid应用另一个目的。

,如果应用程序正在运行,可见,但是当我打开 屏幕关闭或让它超时,它工作正常,按钮点击不进入我的 处理程序。

有没有人知道是否有方法检测这些按钮点击时 屏幕关闭? 来源:AV695's question

我工作的一个应用程序自己,利用一个音量按钮,但该用户还指出,检查与onkeypress事件按钮的正常行为停止工作,一旦屏幕关闭。这是因为活动在屏幕上暂停。

有没有办法在屏幕关闭时保持活动运行,或在屏幕关闭时检查音量按钮的使用情况?我曾尝试过使用此服务,但无法检查Commonsware指出的音量键。

+0

你有没有任何事情的例子,似乎这样做,这将表明它甚至有可能?除了应用程序CPU正在运行但屏幕关闭的有限情况之外,是否有任何迹象表明内核被唤醒并意识到键被按下的事实?如果不是硬件或者至少需要无线固件MODS。只有当内核知道关键事件时,它才会成为说服平台让你的代码知道它的问题。 – 2012-04-26 19:14:07

+0

可悲的是我没有。我唯一能想到的就是媒体播放器。 我开始相信我的想法,就像它一样简单(无需将手机从口袋中取出,只需按下音量按钮即可让您的设备振动,如果您有通知未决,请检查通知)是太复杂而无法创建。 – 2012-04-26 20:30:37

+0

如果状态栏中有新的通知,包括来自第三方应用的自定义通知,LED通常不会闪烁? – 2012-04-26 21:07:14

回答

6

我怀疑,这是支持(而不是诉诸电池排水激活锁定)在任的平台,内核,或者下面的无线固件级别不修改,最后把音量在睡眠期间按下内核的注意力。

在合理的系统ROM修改范围内,更合理的一种可能是修改现有的开源ROM,以便设备将一些自定义平台级代码插入到通常用于唤醒设备准备解锁它 - 至少我们知道确实引起了内核的注意。然后,该代码可以通过声音或振动通知用户是否有未确认的通知。

您可以选择简单地等待,检查设备方向,或寻找另一个按键,以避免在用户将设备放在口袋外并试图解锁时以烦人的方式进行操作。


或者你不能使用音量键,只是设置一个计时器,唤醒每15分钟和振动,如果有未确认的通知,避免了需要在那些口袋里摸索。


你提到这是一个自定义的请求:如果意味着它是一次性的或低容积,另一个值得考虑的选择将是少数厂商具备“蓝牙手表”出与SDK,让您从一个推送通知Android设备。

如果您可以在生成通知时捕获通知,可以将通知推送到用户的手腕,然后让手机重新进入睡眠状态。

+3

感谢您的广泛评论。可悲的是,我想我会停止考虑这个小小的项目,继续前进,可能会在未来的地方再次尝试,这样的事情会更容易一些。这是那些“哎呀,你知道什么会很酷吗?”一种来自随机在线陌生人的想法,所以我认为蓝牙手表的想法有点太过分了。感谢这个主意,虽然:) – 2012-05-02 11:03:41

+0

实际上诉诸于唤醒锁定时,你会怎么做?在我看来,一旦屏幕关闭,活动会暂停并且没有任何密钥被传送? – ondra 2017-10-23 14:58:55

2

当您的应用程序处于后台时,您无法拦截该键,而无法监听KeyPress本身。您可以注册一个ContentObserver,如this question中所述。

0

正如克里斯·斯特拉顿所说,保持你的应用程序活着的唯一方法是使用电池耗尽的唤醒锁。

但是,由于我发现自己处于相同的情况,我想出了另一种解决方案。不幸的是,你需要一个扎根设备以及Xposed框架。

使用Xposed替代zygot进程,以便您可以将自己绑定到系统的任何构造函数和方法中,您将能够在系统处理它们之前捕获原始KeyEvent。

这是在PhoneWindowManager.interceptKeyBeforeQueueing()中完成的。通过使用XC_MethodHook,即使设备处于深度睡眠状态,也可以使用上述方法的beforeHookedMethod()来捕获每个硬件按钮事件。

在您感兴趣的事件发生后,您可以创建一个临时唤醒锁来执行您的操作,但是请不要忘记在完成工作后释放唤醒锁。

如何做到这一点的一个很好的例子是Xposed Torch模块。 但是,如果你依赖于一个非根系统,坏消息是,它是根本不可能的,没有电池耗尽...

0

我也试图在我的应用程序中实现音量按钮按下检测,一旦核心部分完成,稍后将开发部分。即使手机处于锁定状态,屏幕仍处于开启状态,我可以从后台服务中检测音量按键。

背景视频录像机2(BVR2)(也可能是BVR1,我没试过)是即使屏幕关闭时也可以检测音量按键的应用程序之一。在屏幕关闭的情况下尝试实现音量键检测时,我安装了BVR2,希望能够找到它的工作原理。令我惊讶的是,它使我的应用程序能够在屏幕关闭的情况下检测音量键。我的应用程序有一个ContentObserver来监视音量变化,但屏幕关闭时不起作用。当BVR2处于活动状态时,我的应用程序也可以在屏幕关闭时检测音量按键。仍在挖掘。

但BVR2有其自己的触发动作,即录制视频,您可能不希望出现的动作只是为了您的应用程序检测音量按键。

另一个应用程序是QuickClick。这个程序可以让你的应用程序就是缺乏,检测音量按键,即使屏幕关闭电源,无需额外的不必要的行动。只需安装QuickClick并且不要配置任何操作。创建一个ContentObserver来监视流音量更改,然后就绪。即使屏幕关闭,您的应用程序现在也可以检测音量按键。

请注意,我的应用程序作为后台服务。

上述两种应用程序是指用于其他用途,但使用音量键检测到执行的动作。我无法连接到任何提及的应用程序。

如果这些应用程序,可能几十人,可以检测音量按键,它可以做到的。我请求专家了解如何执行此操作,以便我们可以在不依赖其他应用程序的情况下在我们的应用程序中实施。

如果您觉得这个回答有用,请投票。