为AlarmManager警报创建Wi-Fi唤醒锁

时间:2013-10-08 06:09:29

标签: android wifi wakelock

我使用AlarmManager开始定期重复闹钟。我需要Wi-Fi始终保持连接,所以我相信Wi-Fi上的唤醒锁是必要的。我不清楚的是,我创建这个唤醒锁,并在每次触发警报时避免创建它。我的应用中没有任何活动。

我知道我可以为唤醒锁分配一个标签,但似乎没有办法询问Android以查看标签是否存在唤醒锁。如果我能做到这一点,我可以告诉警报触发后唤醒锁已经存在,而不是再打扰它。或者有替代解决方案吗?

2 个答案:

答案 0 :(得分:1)

我不得不面对一个类似的情况。我还使用AlarmManager定期触发服务,即使手机的屏幕被锁定,WiFi也必须始终打开。我发现,手动或以编程方式更改WiFi睡眠策略对于许多设备来说已经足够了,并且不需要使用唤醒锁。但是,在某些HTC设备上,我发现这个设置在晚上根本不起作用。我监控了我的应用程序,发现WiFi会在00:00(午夜)和早上7:00之间关闭 - 其余时间像魅力一样工作。我还在其他地方找到了一篇文章(不是stackoverflow),作者提到了HTC手机能够应对这个问题的特殊设置:

Settings.System.putInt(getContentResolver(), "smartsync_turn_off_wifi", 0);

这发生在大约一年半前,并且使用此设置将我保存在任何至Android 3.1的HTC设备上,至少直到最近。不久前,我们的应用程序的一些用户报告他们的HTC,与Android 4.x,没有做他们应该做的,因为WiFi在晚上关闭,所以看来我使用的神秘设置不起作用不再是新设备了。

无论如何,@ AndroidDev,既然你的问题和我的问题似乎有些相关,我想知道你是否设法解决了它,如果答案是肯定的,那么如何。

答案 1 :(得分:0)

我认为有一种方法可以获得现有唤醒锁(带标签)的列表,但我怀疑这是否是正确的解决方案。看看像'wakelock detector'这样的应用程序 - 我相信它会检索列表并将标签与已知的标签列表相匹配,以便找出创建它的应用程序。还要注意唤醒锁的持续时间 - CPU唤醒锁用于短期使用。我不知道你的闹钟是什么时间,但听起来你可能打算把唤醒锁定时间太长。

当你提到“Wi-Fi上的唤醒锁”时,我会假设你只是指一个普通的唤醒锁 - 屏幕和CPU都有唤醒锁,但没有wifi的唤醒锁。另外,通过标签找到你自己的唤醒锁对我来说没有意义 - 如果你还没有引用你的唤醒锁,你怎么能释放它?

你写道“你需要Wi-Fi始终保持连接”。如果无线AP仍然可用,则即使设备进入睡眠状态,wi-fi也将保持连接 - 只要用户没有更改“在睡眠期间保持wifi状态”设置。您的应用可以检查此设置。