1

我的 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 上不是问题。

有没有其他人遇到过这个问题并找到了解决方案?

4

2 回答 2

3

这个 Google Groups 线程处理了这个问题:

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

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

以下建议是我使用的:

  1. 获取 PARTIAL_WAKE_LOCK,并在屏幕关闭时捕获。然后禁用并重新启用wifi。这是有效的,因为过滤器仅在屏幕关闭时打开,因此在屏幕关闭的情况下启动 wifi 将使其继续工作,直到屏幕再次关闭。这是我们在找到解决方案 (1) 之前所做的。
于 2013-04-25T07:17:09.710 回答
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" 
于 2014-06-22T22:07:19.173 回答