唤醒锁没有打开屏幕?帮助?

Posted

技术标签:

【中文标题】唤醒锁没有打开屏幕?帮助?【英文标题】:Wakelock is not turning on the screen? Help? 【发布时间】:2010-09-11 05:09:05 【问题描述】:

我有一个信号可以让我的应用休眠给定的分钟数(使用 AlarmManager),然后将其唤醒。

一切正常,只是屏幕不亮。我正在使用 BroadcastReceiver 类中的唤醒锁:

     KeyguardManager key = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
     KeyguardLock lock = key.newKeyguardLock(TAG);
     lock.disableKeyguard();
     Log.v(TAG, "alarm: disabled keyguard.");

     PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
     gpsMain.wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, TAG);
     gpsMain.wl.acquire();
     Log.v(TAG, "alarm: acquired wakelock");

     Intent i = new Intent();
     i.setAction(CUSTOM_INTENT);
     context.sendBroadcast(i);

然后,当我确定我的应用程序已启动并运行并再次连接时,我会释放唤醒锁。但是,屏幕永远不会出现!只有当我按下电源按钮手动唤醒屏幕时,该应用才会真正恢复活力。

我正在开发 HTC Hero。任何帮助将不胜感激..

【问题讨论】:

【参考方案1】:

您需要使用ACQUIRE_CAUSES_WAKEUP 标志。

【讨论】:

是的,我将锁改为使用 PowerManager.ACQUIRE_CAUSES_WAKEUP 和 FULL_WAKE_LOCK。我也在使用AlarmManager.RTC_WAKEUP,它应该在闹钟响起时唤醒手机。不过还是没有运气…… @Tom G:嗯……这很奇怪。本周我刚刚与android-developers 列表中的某个人进行了电子邮件交流,他说这对他有用。我对你的症状有点疑惑:是你的代码运行了但是屏幕不亮,还是你的代码根本没有运行? 所以,我想我解决了。我正在获取警报调用的广播接收器中的唤醒锁,但我正在将它释放回我的主线程中。我将发布移动到 onReceive 函数的末尾,现在它似乎正在工作。 @Tom G:你可能犯了我第一次使用WakeLocks时犯的同样错误。我查看了要传递给newWakeLock() 的标签,并认为它是一个密钥——同一个应用程序两次请求相同的密钥会得到相同的WakeLock 对象。这不是它的工作原理。这只是用于记录目的的名称。要在组件之间传递WakeLocks,现在唯一的选择是(叹气)可变静态数据成员。比如我的WakefulIntentService支持这个:github.com/commonsguy/cwac-wakeful

以上是关于唤醒锁没有打开屏幕?帮助?的主要内容,如果未能解决你的问题,请参考以下文章

接近唤醒锁并不总是重新打开屏幕

手机锁定时,使用部分唤醒锁和服务不会使应用程序运行

开启/唤醒屏幕一段时间

WakefulBroadcastReceiver 没有唤醒屏幕

打盹模式如何影响后台/前台服务,有/没有部分/全部唤醒锁?

安卓电量优化之WakeLock锁机制全面解析