Многоадресная рассылка на Android 2.2
Кто-нибудь заставил 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 ответа
Чтобы (грубо) ответить на мой собственный вопрос, дополнительная информация была предоставлена на http://code.google.com/p/android/issues/detail?id=2917 другим лицом. Для потомков, как говорится, ответ brian.ro...@gmail.com...
"Я потратил довольно много времени на отладку проблем mDNS с JmDNS на моем Evo и HTC Hero (CDMA). Я обнаружил, что в беспроводном драйвере Broadcom на Evo, по-видимому, установлен фильтр (и с тех пор как Я получаю похожее представление от пользователя HTC Desire - с тем же набором микросхем, предположительно, с этой телефонной трубкой). Фильтр по умолчанию блокирует любой не одноадресный или сетевой широковещательный трафик, включая многоадресную передачу. Очевидно, теория заключалась в том, что это экономит заряд батареи,
Проблема заключается в том, что wpa_supplicant в Evo не поддерживает удаление этих фильтров при получении MulticastLock. (Проверьте вывод журнала сразу после блокировки, и вы поймете, что я имею в виду). К сожалению, произошло то, что производители оборудования раздробили поддержку многоадресной рассылки....:("
Итак... кажется, что это проблема устройства больше, чем проблема кодирования. D'о.:(Если я получу возможность проверить на другом устройстве...
Я провел небольшое исследование в этом, и я считаю, что это проблема с 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.
Обратите внимание, что приложение многоадресного обмена мгновенными сообщениями Kouchat доступно только для 2.3.7 и более поздних версий, даже если его можно скомпилировать еще в версии 2.1, что еще больше подтверждает эту теорию.
Я думаю, что другая причина - ваш AP не поддерживает.
Другое: Компьютер отправлять / получать в / из Android
ваш компьютер должен использовать только WIFI, лучше всего использовать другие сети