我无法获得运行4.1.2的Note 2或运行2.2的Nexus One,以便在关闭屏幕时保持“足够的清醒”以继续对UDP广播数据包进行操作。我尝试了各种唤醒锁和权限(见下文),它在2.3上的Desire HD,2.1上的华为U8110(T-Mobile脉冲迷你)和2.2.1上的三星Galaxy Mini上工作正常。
它确实直接接收新的TCP连接并对其IP /端口进行操作,但不会广播UDP数据包。如果我点击电源按钮来唤醒屏幕,它会立即响应广播。 强制屏幕保持打开状态(PowerManager.SCREEN_DIM_WAKE_LOCK或更高)会让它继续监听,但这不实用。
我正在收购唤醒锁:
powerManager.newWakeLock(PARTIAL_WAKE_LOCK)
wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL)
wifiManager.createMulticastLock()
宣布权限:
android.permission.INTERNET
android.permission.WAKE_LOCK
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.CHANGE_WIFI_STATE
系统Wifi睡眠政策是'永远'。
工作设备都会超时,但仍会响应UDP广播。
在调试器的Threads视图中,我可以看到它仍在阻塞 DatagramSocket.receive() 而在工作设备上返回一个数据包然后记录到logcat。
所有设备都运行相同的.apk。
答案 0 :(得分:0)
对于遇到同样问题的其他人的更新:
Google似乎认为这应该可行:
http://code.google.com/p/android/issues/detail?id=34278
Nexus One已经老了,所以我想没有人关心。
然而,注意事项2并非如此,我在三星的开发者论坛中提到过。他们也不在乎:
我目前的解决方法是在用户首选项中提供一个选项来获取完整的唤醒锁而不是部分唤醒锁。我添加了代码来覆盖我的用户界面,黑屏在点击时消失;虽然背光仍在,但这不那么烦人,并阻止潜在的屏幕烧伤。关闭其他灯(电容式按钮)应该是可行的,但恕我直言,让用户知道他们的手机实际上仍然完全清醒是“好”的。
它会停止设备正常的锁屏超时。手动电源按钮将锁定,但会关闭屏幕,因此停止UDP接收,唤醒锁定屏幕将一直保持打开状态直到用户解锁。
所以这提供了糟糕的用户体验,但这是我发现的最好的。
欢迎任何建议。