我的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上没有问题。
是否还有其他人遇到此问题并找到解决方案?
答案 0 :(得分:3)
此Google网上论坛主题可解决此问题:
https://groups.google.com/forum/?fromgroups=#!topic/android-platform/OpbSdp9FTmA
它与某些芯片组和深度睡眠有关。基本上,驱动程序检测设备何时进入深度睡眠并关闭UDP广播接收。根据我的经验,UDP发送仍然有效,设备上的UDP发送/监听也会听到数据包,但它是鬼,设备实际上是聋。
以下建议是我使用的:
- 获取PARTIAL_WAKE_LOCK,并在屏幕熄灭时陷阱。然后禁用并重新启用wifi。这是因为过滤器 只有在屏幕熄灭时才会打开,所以开始使用 屏幕关闭将使其保持工作,直到屏幕再次关闭。这个 是我们在找出解决方案(1)之前所做的。
醇>
答案 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"