我搜索并找不到这个问题的答案。我正在开发将一直运行的应用程序。我正在使用 wifi,一切正常,直到设备进入睡眠状态。一台设备发送多播数据包,另一台设备应该获取它们并唤醒,但事实并非如此。现在网络线程是StartService()
从我的主类启动的服务线程启动的。在服务中,我得到了一个 wifi 锁和一个 wifi 多播锁,以便 wifi 和多播“应该”在设备休眠时保持打开状态。我还尝试在混音中添加部分唤醒锁定,但仍然没有任何效果。有任何想法吗?我现在正在开发两个运行 android 2.3.3 的 nexus。
问问题
1226 次
1 回答
1
您需要在 WakeLock 中设置 PowerManager.ACQUIRE_CAUSES_WAKEUP 标志,但是 PowerManager.ACQUIRE_CAUSES_WAKEUP 标志不适用于 PowerManager.PARTIAL_WAKE_LOCK,但它应该适用于 PowerManager.SCREEN_DIM_WAKE_LOCK。当您在 WakeLock 上调用 acquire() 时,下面的代码应该唤醒您设备的显示器和 CPU。5 秒的睡眠时间应该让您的 WiFi 有足够的时间醒来。
WakeLock lock = ((PowerManager) getSystemService(POWER_SERVICE)).newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
lock.acquire();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
// do work here..
lock.release()
于 2011-11-13T21:21:46.087 回答