我無法獲得運行4.1.2的Note 2或運行2.2的Nexus One,以便在屏幕關閉的情況下保持「清醒」狀態,以繼續處理UDP廣播數據包。我已經嘗試過各種喚醒和權限(見下文),它在2.3上的Desire HD,2.1上的華爲U8110(T-Mobile脈衝迷你)和2.2.1上的三星Galaxy Mini上運行良好。某些設備在屏蔽關閉時不會收到UDP廣播
它確實接收新的TCP連接並直接對其IP /端口進行操作,但不廣播UDP數據包。如果我點擊電源按鈕喚醒屏幕,它會立即響應廣播。 強制屏幕保持打開狀態(PowerManager.SCREEN_DIM_WAKE_LOCK或更高版本)確實會保持監聽,但這不切實際。
我獲得wakelocks:
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
系統無線上網睡眠策略是 '從來沒有'。
工作設備都超時,但仍然響應UDP廣播。
在調試器的線程查看我可以看到它仍然阻塞在 DatagramSocket.receive() 而其與分組,然後將其記錄到的logcat返回工作裝置上。
所有設備運行相同的.apk。
你是否在一個單獨的線程中,並且該線程仍然在屏幕關閉時仍在運行? – user2652394
是的。我認爲它仍在運行,它在DDMS的線程視圖中,並且在屏幕熄滅時似乎不會改變。它看起來與TCP偵聽線程一樣工作。 – NeilS