接收音量按键事件时,手机处于深度睡眠(Receive volume key press events

2019-08-02 08:42发布

我试图赶上音量向上/向下按压事件时,手机处于深度睡眠模式。 我看了几篇文章,在这里我做了什么。

在活动onCreate方法我设置了WakeLock

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

我已阅读,即使如果我设置我的应用程序对事件做出响应我的屏幕被锁定。 此外,我已经到Android清单添加权限。

<uses-permission android:name="android.permission.WAKE_LOCK" />

然后在onCreate方法我宣布我的广播接收器

VolReceiver volumeBroadcastReceiver = new VolReceiver();

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

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

Answer 1:

我试图赶上音量向上/向下按压事件时,手机处于深度睡眠模式。

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

在活动onCreate方法我设置了激活锁定

那么你是不是在睡眠模式。

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

这里有几种可能性。 其中之一是,你的进程被终止,因为它不再需要。 一旦你不再有任何前景活动,你的过程是有资格被终止,以释放内存的其他应用程序,并可以在任何时候发生。 另一种可能性是,Android的只是当屏幕关闭时不会发送广播。



Answer 2:

我做了几乎同样的事情,但我通过更改源代码来实现它。 我有以下解释。

只要您的手机进入睡眠状态,你的MediaPlaybackService.java不会听的KeyEvents,但MediaButtonIntentReceiver.java会,所以这里接收音量的意图上下和广播的意图,并在MediaPlaybackService.java接受它,但保留一件事记住,你不能在UI从这里改变,这样你就可以从广播服务的另一个目的,使您的MediaPlaybackActivity.java接受它,这将作为你的屏幕醒来尽快更改UI。

FYI:当屏幕关闭时,PhoneWindowManager.java队列中的所有连续的意图,并尽快释放按钮将立即应用所有的意图。



文章来源: Receive volume key press events when phone is in deep sleep