Многоадресная рассылка на Android 2.2 - PullRequest
16 голосов
/ 02 сентября 2010

Кто-нибудь заставил Multicast работать на Android 2.2, в частности JmDNS для обнаружения службы Bonjour. На таймфрейме Android 1.5-> 2.0 есть много вопросов и ответов, в том числе на stackOverflow, которые указывают на различные уровни успеха, и ошибка в трекере ошибок, которая указывает, что она была исправлена ​​и закрыта для 2.2 (http://code.google.com/p/android/issues/detail?id=2323). Я пробовал исходный код "TuneControl", но он работал на ~ 1.5, не обновлялся и не работает для меня на 2.2.

Итак, вопросы ... 1) Кто-нибудь видел многоадресную работу на 2.2, в частности JmDNS и специально для обнаружения службы Bonjour?

2) Что необходимо в коде, чтобы эта работа работала?

Я использую соответствующие разрешения:

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

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

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

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

Я получаю многоадресную блокировку:

WifiManager wifi = (WifiManager)getSystemService( Context.WIFI_SERVICE );
if(wifi != null)
{
    MulticastLock mcLock = wifi.createMulticastLock("mylock");
    mcLock.acquire();
...

А затем попробуйте запустить jmDNS для поиска серверов:

    mdns = JmDNS.create(addr, HOSTNAME);
    jmdns.addServiceListener(TOUCH_ABLE_TYPE, listener);
    jmdns.addServiceListener(DACP_TYPE, listener);
    ...

Слушатель никогда не видит никаких услуг. Используя Wireshark, я подтвердил, что пакеты запроса отправляются и что сервер отвечает, но ответный пакет никогда не виден кодом прослушивателя сокета в библиотеке jmDNS.

Так ... я что-то упустил? Это все еще ошибка? Получил ли кто-нибудь хоть что-то подобное на работу ???

Ответы [ 3 ]

13 голосов
/ 15 сентября 2010

Чтобы (грубо) ответить на мой собственный вопрос, дополнительную информацию предоставил на http://code.google.com/p/android/issues/detail?id=2917#c48 другой человек.Для потомков, как они говорят, вот ответ brian.ro ... @ gmail.com ...

"Я потратил довольно много времени на отладку проблем mDNS с JmDNS на моем Evoи HTC Hero (CDMA). Что я обнаружил, так это то, что в драйвере беспроводной связи Broadcom на Evo, по-видимому, установлен фильтр (и, поскольку я получаю похожее представление от пользователя HTC Desire - с тем же чипсетом, предположительно, чтотелефон также.) Фильтр, по умолчанию, блокирует любой не одноадресный или сетевой широковещательный трафик, включая многоадресную рассылку. Очевидно, теория заключалась в том, что это экономит заряд батареи.не поддерживается удаление этих фильтров при получении MulticastLock. (Проверьте вывод журнала сразу после получения блокировки, и вы поймете, что я имею в виду.) К сожалению, произошло то, что поставщики оборудования имеют фрагментированную поддержку многоадресной рассылки .... :("

Итак ... кажется, что это проблема устройства, а не проблема кодирования. D'Oh. :( Если я получу возможность проверить надругое устройство ...

7 голосов
/ 23 марта 2012

Я провел небольшое исследование в этой области, и я считаю, что это проблема с Android в целом, и исправлена ​​в Android 2.3.7 или около нее.

Это немного анекдотично, но вот что я проверял:

  • HTC Desire, 2.2, сток: сбой
  • HTC Desire, 2.3.7, CyanogenMod: успех
  • Motorola Milestone, 2.1-обновление1: сбой
  • HTC Desire S, 2.3.3: сбой
  • Acer Iconia A501, 3.2.1: успех
  • Самсунг-то, 2.3.3: сбой
  • HTC Legend, 2.2 думаю: сбой

Когда я говорю «сбой», фактически все они могут отправлять многоадресные сообщения на устройства «успеха», но никогда не получают ничего обратно, кроме своих собственных сообщений - как описывает jldupont.

Обратите внимание, что приложение многоадресной рассылки IM Kouchat доступно только для 2.3.7 и более поздних версий, даже если его можно скомпилировать еще в версии 2.1, что дает дополнительную уверенность этой теории. *

1 голос
/ 13 июля 2012

Я думаю, что другая причина в том, что ваша точка доступа не поддерживает.

Другое: Компьютер отправляет / получает на / с Android

ваш компьютер должен использовать только WIFI,Лучшая из всех других сетей

...