Широковещательные пакеты UDP не принимаются в спящем режиме - PullRequest
1 голос
/ 20 февраля 2012

Мое приложение Android периодически отправляет и принимает широковещательные сообщения UDP в сети WiFi.Когда дисплей включен, все работает нормально и все сообщения отправляются и принимаются правильно.Однако, когда дисплей переходит в спящий режим, приложение перестает получать широковещательные сообщения UDP (но все равно отправляет их).

Получение WiFiLock (а также многоадресной блокировки), похоже, не имеет никакого значения, и моя политика сна wifi установлена ​​на WIFI_SLEEP_POLICY_NEVER.

Это проблема для Android 2.3.3 и2.3.5 (телефоны Samsung galaxy SII), но не проблема на старом HTC Hero, на котором установлен мод cyanogen с android 2.3.7.

Кто-нибудь еще сталкивался с этой проблемой и нашел решение?

Ответы [ 2 ]

3 голосов
/ 25 апреля 2013

Эта ветка групп Google решает проблему:

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

Это связано с определенными чипсетами и глубоким сном. По сути, драйверы определяют, когда устройство переходит в глубокий сон, и отключают прием UDP-вещания. По моему опыту, отправка UDP все еще работает, и отправка / прослушивание UDP на устройстве также будет слышать пакеты, но это призрак, устройство фактически глухое.

Я рекомендую следующую рекомендацию:

  1. Получите PARTIAL_WAKE_LOCK и перехватывайте, когда экран выключается. Затем отключите и включите Wi-Fi. Это работает, потому что фильтр включается только при выключении экрана, поэтому запуск Wi-Fi с выключение экрана будет работать до тех пор, пока экран снова не погаснет. это это то, что мы сделали, прежде чем мы нашли решение (1).
1 голос
/ 23 июня 2014

Я использую это:

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" 
...