1

我使用 AlarmManager 启动定期重复的警报。我需要 Wi-Fi 始终保持连接,所以我认为 Wi-Fi 上的唤醒锁是必要的。我不清楚的是我在哪里创建这个唤醒锁并避免每次触发警报时创建它。我的应用程序中没有活动。

我知道我可以将标签分配给唤醒锁,但似乎没有任何方法可以询问 Android 以查看标签是否存在唤醒锁。如果我能做到这一点,我可以告诉警报触发时唤醒锁已经存在,而不必费心重新创建它。还是有替代解决方案?

4

2 回答 2

1

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

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

这发生在大约一年半前,至少在最近之前,使用此设置可以在任何 HTC 设备(最高为 Android 3.1)上拯救我。不久前,我们应用程序的一些用户报告说他们的 HTC 使用 Android 4.x,因为晚上 WiFi 关闭,所以没有做他们应该做的事情,所以我使用的神秘设置似乎不起作用不再在较新的设备上。

无论如何,@AndroidDev,由于您的问题和我的问题似乎有些相关,我想知道您是否设法解决它,如果回答是肯定的,如何解决。

于 2014-04-05T18:53:51.920 回答
0

我认为有一种方法可以获取现有唤醒锁(带有标签)的列表,但我质疑这是否是正确的解决方案。查看像“唤醒锁检测器”这样的应用程序 - 我相信它会检索列表并将标签与已知的标签列表进行匹配,以便找出哪个应用程序创建了它。还要注意唤醒锁的持续时间 - CPU 唤醒锁旨在用于非常短期的使用。我不知道你的闹钟时间是多长,但听起来你可能打算保持唤醒锁太久。

当您提到“Wi-Fi 上的唤醒锁”时,我假设您只是指常规唤醒锁 - 屏幕和 CPU 都有唤醒锁,但没有 wifi 唤醒锁之类的东西。此外,通过标签找到你自己的唤醒锁对我来说没有意义——如果你仍然没有对你的唤醒锁的引用,那么你怎么能释放它呢?

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

于 2013-10-08T14:42:45.410 回答