Многоадресная рассылка на Android не хочет работать, когда экран выключен - PullRequest
2 голосов
/ 23 апреля 2011

Я пытаюсь разработать приложение Multicast для Android.Это работает, однако, когда экран выключен, это не так.Я знаю, что это не мое устройство, так как Winamp работает нормально, когда экран выключен.Я использую это как службу.

AndroidManifest.xml определение для службы:

<service android:exported="true" android:name="AndroidRocketService"></service>

Java-код для службы:http://tinypaste.com/c569a/fullscreen.php?hash=e7495a255a33a99ea8cc48bf24ea2b01&toolbar=true&linenum=true

(Приложение будет с открытым исходным кодом, когда оно будет работать, поэтому я не буду беспокоиться о публикации всего этого нерабочего)

Заранее спасибо,

Джо

Ответы [ 2 ]

3 голосов
/ 14 мая 2011

Алеадам ответ правильный.Вам также необходимо убедиться, что вы приобрели многоадресные блокировки, как указано в комментариях и по адресу:

Android Multicast сокет прекращает прослушивание << Посмотрите на ответ Эриха (не принятый) </p>

Гораздо большая проблема заключается в том, что до появления Gingerbread Android не следовал надлежащим стандартам в своих многоадресных алгоритмах, как отмечалось в нескольких (сердитых) обменах с разработчиками Google здесь .На их форумах есть еще одна ошибка, из-за которой телефоны до Gingbread не могли должным образом подключиться к многоадресной рассылке, но сейчас я не могу ее найти.

Суть в том, что телефоны до Gingbread установили TTL многоадресных пакетов на 1. Так что, если что-нибудь по пути уменьшает TTL (обычно некоторый промежуточный маршрутизатор), ваш пакет «умрет на корню».

Google опубликовал исправление для ошибки TTL в сообщении, которое я связал, но для его исправления необходимо создать собственное ядро ​​и развернуть его на телефоне.

Стоит также отметить, что несколько очень популярных телефонов не выполняют многоадресную передачу должным образом.На ум приходит HTC Incredible, который может отправлять, но не получать.Если вы используете прошивку стороннего производителя (например, Cyanogen), то многоадресная передача работает нормально.

Вне моей головы - вот некоторые из них, которые я знаю, работают / не работают

  • HTC Incredibe (Не могу получить)
  • Nexus One (OK)
  • Nexus S (OK)
  • Motorola Droid / Droid Pro (OK)
3 голосов
/ 08 мая 2011

Очевидные:

  • Убедитесь, что вы установили разрешения в манифесте:

<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

  • и что телефон не засыпал до выполнения the wake.acquire() строки (используйте boolean bool = wake.isHeld(); для проверки).
...