当手机处于深度睡眠状态时接收音量键按下事件

时间:2012-11-06 10:13:26

标签: java android broadcastreceiver

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

在活动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必须解决此问题,但它没有“T。所以请帮帮我,提供一些信息。

2 个答案:

答案 0 :(得分:2)

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

每当您的手机进入睡眠状态时,您的 MediaPlaybackService.java 都不会收听keyEvents,但 MediaButtonIntentReceiver.java 会这样,因此这里会收到音量上下的意图,并广播一个意图并在 MediaPlaybackService.java 中接收它,但记住一件事你不能从这里更改UI,这样你就可以从服务广播另一个意图并使你的 MediaPlaybackActivity.java 接收它,这将在屏幕唤醒后立即更改用户界面。

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

答案 1 :(得分:2)

  

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

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

  

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

然后你没有进入睡眠模式。

  

然后我按下电源按钮应用程序停止接收广播事件

来锁定我的手机屏幕

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