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