Многоадресная рассылка на Android 2.2
Вопрос
Кто-нибудь заставил многоадресную рассылку работать на 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.
Так...я что-то пропустил?Это все еще ошибка?КТО-нибудь заставил что-нибудь хотя бы отдаленно подобное работать???
Решение
Чтобы (грубо) ответить на мой собственный вопрос, дополнительная информация была предоставлена по адресу http://code.google.com/p/android/issues/detail?id=2917#c48 другим человеком.Для потомков, как говорится, вот ответ brian.ro...@gmail.com...
«Я потратил довольно много времени на отладку проблем MDNS с JMDNS на моем EVO и HTC Hero (CDMA).То, что я обнаружил, это то, что в EVO на EVO есть фильтр на месте Broadcom Wireless (и, поскольку я получаю похожий DERPT от пользователя HTC Desire - с тем же чипсетом, предположительно, этот телефон).Фильтр, по умолчанию, блокирует любой необушенный или сетевой трафик трансляции, включая многоадресную расстояние.Очевидно, теория была спасателем батареи.
Проблема, по -видимому, заключается в том, что WPA_Supplicant на EVO не поддерживает удаление этих фильтров, когда вы получаете многоадресную залок.(Проверьте вывод журнала сразу после того, как вы получите блокировку, и вы поймете, что я имею в виду).К сожалению, что произошло, так это то, что поставщики оборудования имеют фрагментированную многоадресную поддержку ....:("
Так...Похоже, это проблема устройства, а не проблема кодирования.Ох.:( Если у меня будет возможность протестировать на другом устройстве...
Другие советы
Я делал немного исследований в этом, и я считаю, что это проблема с Android в целом, и зафиксировано в Android или в зависимости от 3,3.7.
Это слишком анекдотирует, но вот что я проверял:
- HTC Desire, 2.2, запас: провал
- HTC Desire, 2.3.7, Cyanogenmod: успех
- Motorola Milestone, 2.1-Update1: Fail
- HTC Desire S, 2.3.3: провалиться
- Acer Iconia A501, 3.2.1: Успех
- Samsung что-то, 2.3.3: провалиться
- HTC Legend, 2.2 Я думаю: сбой
Когда я говорю «неудачу», на самом деле все они могли отправлять многоадресные сообщения на «Успех» устройств, но никогда не получают ничего обратно, кроме их собственных сообщений - как описывает jldupont.
Обратите внимание, что Multicast IM приложение Kouchat. Доступно только для 2.3.7, даже если он может быть сделан, чтобы скомпилировать до 2,1, что дает дальнейшее доверие к этой теории.
Я думаю, что другой причина - ваш AP не поддерживает.
Другое: Компьютер Отправить / Получение в / с Android
Ваш компьютер должен использовать только Wi-Fi, Best Off Undow