Android 屏幕关闭时识别音量按钮按下

Android 屏幕关闭时识别音量按钮按下,android,power-management,wakelock,screen-off,Android,Power Management,Wakelock,Screen Off,我试图识别当屏幕关闭时,用户何时按下音量控制键来更新活动。据我所知,当手机处于睡眠状态时,广播接收器(我认为)不工作,因此唯一的方法是使用部分唤醒锁保持活动运行。我的应用程序是一个基本的应用程序,不应该使用太多的电池,但我担心使用部分唤醒锁可能会耗尽电池(这违背了在屏幕关闭时识别按钮按下的目的) 对于一个基本的应用程序来说,部分唤醒锁定是否真的是一个问题?如果是,最好的方法是什么?如果不是,最好的方法是什么?使用部分唤醒锁定(即何时获取/释放) 提前谢谢。这里有两个问题;我将重点关注其中的“唤醒

我试图识别当屏幕关闭时,用户何时按下音量控制键来更新活动。据我所知,当手机处于睡眠状态时,广播接收器(我认为)不工作,因此唯一的方法是使用部分唤醒锁保持活动运行。我的应用程序是一个基本的应用程序,不应该使用太多的电池,但我担心使用部分唤醒锁可能会耗尽电池(这违背了在屏幕关闭时识别按钮按下的目的)

对于一个基本的应用程序来说,部分唤醒锁定是否真的是一个问题?如果是,最好的方法是什么?如果不是,最好的方法是什么?使用部分唤醒锁定(即何时获取/释放)


提前谢谢。

这里有两个问题;我将重点关注其中的“唤醒锁定”部分

唤醒锁因搅动移动设备的电池而臭名昭著。了解设备会使屏幕变暗,然后在关闭CPU并进入“睡眠”模式之前关闭屏幕。这对手机来说是非常重要的一步,因为它可以节约电池

唤醒锁非常危险,因为完成后很容易忘记释放锁

一般来说,当设备试图睡眠时,你不应该试图让它保持清醒;当你耗尽用户的电池时,这会激怒用户

以下是一些可能更好地处理唤醒锁的提示:

1) 仅当用户处于停靠/充电状态时才允许此操作

2) 使用接受超时参数的WakeLock.aquire(..)版本。这样,您可以醒来,检查一些状态,然后在没有发生任何事情时自动返回睡眠状态。(请参阅)

3) 使用AlarmManager创建精确的计时器;这将允许您的应用程序在其他应用程序也开始工作时被唤醒


4) 使用JobScheduler API(在L中发布),它将允许您从单个API处理此类调度和工作延迟这几乎是不可能的,因为这是在窗口管理器层处理的。有关从操作系统方面启用它的示例,请参阅此修补程序。它需要修改您作为第三方开发人员无法访问的内容。否则,您将不得不持有唤醒锁。您将看到前面提到的dock/charge i在提交时,它也会处理这个问题


可能重复“是”,但那篇文章是关于一项服务的,没有包含示例代码或如何使用锁的答案。@husam请不要为此一直持有唤醒锁,它会使手机保持唤醒状态,CPU运行,不允许它进入睡眠状态,从而耗尽用户的电池。对于第四种选择,您可以检查当前设备当您的活动/片段接收onResume回调时的更改状态。这样,您将完全跳过wakelock用法:)。这仅解决活动移动到前台时的初始状态。要进行实时更新,请继续使用广播接收器。