2011-02-27 114 views
0

我搜索,无法找到这个问题的答案。我正在研究可以一直运行的应用程序。我正在使用wifi,一切正常,直到设备睡觉。一台设备发出组播数据包,另一台设备应该得到它们并唤醒,但事实并非如此。现在,网络线程从我的主类中的StartService()开始的服务线程开始。在服务中,我得到了一个wifi锁和一个wifi多播锁,这样wifi和多播“应该”在设备睡眠时保持不变。我也尝试添加一个部分唤醒锁,但仍然没有任何效果。有任何想法吗?我现在正在开发运行android 2.3.3的两个nexus。允许wifi数据,同时睡眠和唤醒设备

回答

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()