2012-02-20 109 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"