在休眠模式下未接收UDP广播数据包

时间:2012-02-20 15:13:16

标签: android android-wifi android-networking

我的Android应用程序会定期在WiFi LAN上发送和接收UDP广播消息。当显示器打开时,一切正常,所有消息都被正确发送和接收。当显示器进入休眠状态时,应用程序会停止接收UDP广播消息(但仍会发送它们)。

获取WiFiLock(以及多播锁)似乎没有任何区别,我的wifi睡眠策略设置为WIFI_SLEEP_POLICY_NEVER。

这是Android 2.3.3和2.3.5(三星Galaxy SII手机)上的一个问题,但在使用android 2.3.7运行cyanogen mod的旧HTC Hero上没有问题。

是否还有其他人遇到此问题并找到解决方案?

2 个答案:

答案 0 :(得分:3)

此Google网上论坛主题可解决此问题:

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

它与某些芯片组和深度睡眠有关。基本上,驱动程序检测设备何时进入深度睡眠并关闭UDP广播接收。根据我的经验,UDP发送仍然有效,设备上的UDP发送/监听也会听到数据包,但它是鬼,设备实际上是聋。

以下建议是我使用的:

  
      
  1. 获取PARTIAL_WAKE_LOCK,并在屏幕熄灭时陷阱。然后禁用并重新启用wifi。这是因为过滤器   只有在屏幕熄灭时才会打开,所以开始使用   屏幕关闭将使其保持工作,直到屏幕再次关闭。这个   是我们在找出解决方案(1)之前所做的。
  2.   

答案 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"