2013-10-30 30 views
0

我無法獲得運行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。

+0

你是否在一個單獨的線程中,並且該線程仍然在屏幕關閉時仍在運行? – user2652394

+0

是的。我認爲它仍在運行,它在DDMS的線程視圖中,並且在屏幕熄滅時似乎不會改變。它看起來與TCP偵聽線程一樣工作。 – NeilS

回答

0

其他任何人有同樣問題的更新:

谷歌似乎認爲,這應該很好地工作:

http://code.google.com/p/android/issues/detail?id=34278

Nexus One手機是舊的,所以我想無人問津。

然而,注2不是三星開發者論壇所要求的。他們不關心或者:

http://developer.samsung.com/forum/board/thread/view.do?boardName=General&messageId=247968#postId247968

我目前的解決方法是提供用戶偏好的選項搶滿激活鎖定,而不是局部的。我添加了代碼來覆蓋我的用戶界面,並在水龍頭上消失;雖然背光仍然在這上面不那麼煩人,並且停止潛在的屏幕灼傷。關閉其他燈(電容按鈕)應該是可行的,但恕我直言,讓用戶知道他們的電話實際上仍然完全清醒是'好'。
它停止設備的正常鎖定屏幕超時。按下手動電源按鈕將鎖定,但關閉屏幕並停止UDP接收,在喚醒時鎖定屏幕一直保持打開,直到用戶解鎖。
因此,這提供了糟糕的用戶體驗,但這是我找到的最好的。

歡迎任何建議。