2012-02-20 110 views
1

我的Android應用程序定期在WiFi局域網上發送和接收UDP廣播消息。顯示屏開啓時,一切正常,所有信息都能正確發送和接收。當顯示器進入睡眠狀態時,應用程序停止接收UDP廣播消息(但仍然發送它們)。未在睡眠模式下收到UDP廣播數據包

獲取WiFiLock(以及多播鎖)似乎沒有任何區別,我的wifi睡眠策略設置爲WIFI_SLEEP_POLICY_NEVER。

這是Android 2.3.3和2.3.5(Samsung Galaxy SII手機)上的一個問題,但對於運行android 2.3.7的舊版HTC Hero運行cyanogen mod不是問題。

有沒有其他人有這個問題,並找到了解決辦法?

+0

你在哪裏設置你UDPSocket?在活動或服務中? – 2012-02-20 15:24:09

+0

服務內部。我們還在一項活動中對它進行了測試,沒有任何區別。 – 2012-02-21 11:15:59

+0

,並且您從「InputStream」中讀取「-1」字節,表明流已結束? – 2012-02-21 12:27:41

回答

3

這谷歌論壇主題涉及的問題:

https://groups.google.com/forum/?fromgroups=#!topic/android-platform/OpbSdp9FTmA

它有一定的芯片組和深度睡眠做。基本上,驅動程序檢測設備何時進入深度睡眠並關閉UDP廣播接收。根據我的經驗,UDP發送仍然有效,並且設備上的UDP發送/收聽也會聽到數據包,但它是一個鬼,該設備實際上是聾啞人。

以下建議是我用:

  1. 先拿PARTIAL_WAKE_LOCK和陷阱當屏幕熄滅。然後禁用並重新啓用wifi。這是有效的,因爲只有當屏幕關閉時纔開啓過濾器 ,因此在 屏幕關閉的情況下啓動wifi將保持其工作,直到屏幕再次關閉。這個 就是我們在解決方案(1)之前所做的。
1

我用這個:

WifiManager wifi; 
wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
MulticastLock wifilock = wifi.createMulticastLock("just some tag text"); 
wifilock.acquire(); 

清單:

permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"