电话处于深度睡眠状态时接收音量按键事件

当手机处于深度睡眠模式时,我正试图捕捉音量调高/按下事件。 我已经阅读了几篇文章,在这里我做了什么。

在Activities onCreate方法中,我设置了一个WakeLock

 PowerManager mgr = (PowerManager)this.getSystemService(Context.POWER_SERVICE); WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock"); wakeLock.acquire(); 

我已经读过,即使我的屏幕被锁定,如果我设置了这个,我的应用程序将响应事件。 此外,我已添加Android Manifest的权限。

  

然后在onCreate方法中,我声明了我的广播接收器

 VolReceiver volumeBroadcastReceiver = new VolReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("android.media.VOLUME_CHANGED_ACTION"); registerReceiver(volumeBroadcastReceiver, filter); 

这一切都很好,然后应用程序在前台或后台,但然后我通过按下电源按钮应用程序停止接收广播事件锁定我的手机屏幕,我认为PowerManager必须解决这个问题,但事实并非如此。 所以请帮帮我,提供一些信息。

当手机处于深度睡眠模式时,我正试图捕捉音量调高/按下事件。

根据定义,这是不可能的。

在Activities onCreate方法中,我设置了一个WakeLock

然后你不处于睡眠模式。

然后我通过按下电源按钮应用程序停止接收广播事件来锁定我的手机屏幕

这里有一些可能性。 一个是您的流程终止,因为不再需要它。 一旦您不再拥有任何前台活动,您的流程就有资格被终止以释放其他应用程序的内存,并且这可能随时发生。 另一种可能性是Android在屏幕关闭时根本不发送该广播。

我做了几乎相同的事情,但我通过更改源代码实现了它。 我在下面解释过。

每当你的手机进入睡眠状态时,你的MediaPlaybackService.java都不会监听keyEvents,但是MediaButtonIntentReceiver.java会这样,所以在这里收到卷的意图,然后广播一个意图并在MediaPlaybackService.java中接收它,但保留一件事请注意,您无法从此处更改UI,因此您可以从服务广播另一个意图并使您的MediaPlaybackActivity.java接收它,这将在您的屏幕唤醒后立即更改UI。

仅供参考:当屏幕关闭时, PhoneWindowManager.java将所有连续意图排队,一旦释放按钮,它将立即应用所有意图。