屏幕关闭时检查音量按钮的使用情况

时间:2012-04-21 19:02:53

标签: android button volume

对于这个问题,我将引用另一个对他们的问题没有回应的用户:

  

我写了一个Andoid应用程序,它将硬件音量按钮用于其他目的。

     

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

     

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

我正在使用一个使用音量按钮的应用程序,但是正如该用户也注意到的那样,一旦屏幕关闭,使用onKeyPress检查按钮的正常行为就会停止工作。这是因为活动在屏幕上暂停了。

是否有办法在屏幕关闭时保持活动运行,或者在屏幕关闭时检查音量按钮的使用情况?我之前尝试过使用服务但是不可能像Commonsware那样检查音量键。

5 个答案:

答案 0 :(得分:6)

我怀疑在平台,内核或底层无线电固件级别上是否支持(不使用电池耗尽的唤醒锁)而不修改最后一个以在睡眠期间将音量按压引起内核注意。< / p>

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

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


或者您无法使用音量键,只需将计时器设置为每15分钟唤醒一次,如果有未确认的通知则振动,避免在口袋里摸索。


你提到它是一个自定义请求:如果暗示它是一个关闭或低容量,另一个选择考虑将是一些供应商有一个SDK“蓝牙手表”,可以让你从Android设备推送通知。

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

答案 1 :(得分:2)

当您的应用程序处于后台时,您无法拦截密钥,而是不会收听KeyPress本身。您可以注册ContentObserver,如this question

中所述

答案 2 :(得分:0)

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

然而,由于我发现自己处于同样的境地,我想出了另一种解决方案。不幸的是,你需要一个root设备以及Xposed框架。

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

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

在捕捉到您感兴趣的事件后,您可以创建一个临时的唤醒锁来完成您的工作,但不要忘记在完成工作后释放唤醒锁。

如何实现这一目标的一个很好的例子是Xposed Torch模块。 但是,如果你依赖于一个非根系的系统,那么坏消息是,如果没有耗尽电池就不可能......

答案 3 :(得分:0)

我还试图在我的应用程序中实现音量按钮按下检测,并且在核心部分完成后我将该部分留待稍后开发。即使手机被锁定,我也能够在屏幕开启的情况下检测音量键按下。来自后台服务。

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

但是BVR2有自己的触发动作,即记录视频,这可能是你想要检测音量键按下时不想发生的动作。

另一款应用是QuickClick。这个应用程序可以为您的应用程序提供它缺少的功能,即使屏幕关闭也可以检测音量键按下,无需额外的不必要的操作。只需安装QuickClick,不要配置任何操作。创建ContentObserver以监控流量变化,您就可以了。即使屏幕关闭,您的应用程序现在也能够检测到音量键按下。

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

上面提到的两个应用程序都用于其他用途,但使用卷密钥检测来执行操作。我与任何提到的应用程序无关。

如果这些应用程序,可能还有其他几十个应用程序可以检测音量键按下,则可以完成。我请求专家了解如何操作,以便我们可以在我们的应用中实施,而无需依赖其他应用。

如果您觉得这个答案有用,请向上投票。

答案 4 :(得分:-1)

我不确定它是否像这样简单,但请查看这个安卓博客:

Allowing applications to play nice(r) with each other: Handling remote control buttons

它解释了接收上/下音量控制和其他音乐控制的广播接收器的用法。

总之,您应该使用registerMediaButtonEventReceiver