1

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

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

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

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

<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必须解决这个问题,但事实并非如此。所以请帮助我,提供一些信息。

4

2 回答 2

2

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

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

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

于 2012-11-06T10:22:58.860 回答
2

当手机处于深度睡眠模式时,我试图捕捉音量增大/减小按下事件。

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

在活动 onCreate 方法中,我设置了 WakeLock

那么你就没有处于睡眠模式。

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

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

于 2012-11-06T11:55:19.583 回答