2010-09-02 2 views
16

Кто-нибудь получил 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.Multicast на Android 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.

Итак ... я что-то упустил? Это еще ошибка? ЛЮБОЙ получил что-то даже отдаленно, как это, чтобы работать ???

ответ

13

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

«Я потратил довольно много времени отладки MDNS проблемы с JmDNS на моем Эво и HTC Hero (CDMA). То, что я нашел , похоже, есть фильтр в место в беспроводном водителе беспроводной связи на Evo (и так как я получаю аналогичную рецензию от пользователя HTC Desire - с тем же чипсет, предположительно, тот же телефон). Фильтр по умолчанию блокирует любой сетевой трафик, не являющийся одноадресным или , в том числе многоадресной рассылки. eory был это заставка батареи.

Проблема, как представляется, wpa_supplicant на Эво не поддержка удаления этих фильтров при вы получаете MulticastLock. (Проверьте вывод журнала сразу после получения блокировки , и вы увидите, что я имею в виду). К сожалению, что произошло, производители аппаратного имеют фрагментарный поддержку многоадресной рассылки .... :(»

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

+0

групповой обработки на Android действительно является проблематичным в этой точке (2.2). – jldupont

+1

Я получаю «многоадресную блокировку» ОК на устройстве Samsung Galaxy S, но получаю только пакеты, которые я отправил. Чтобы обойти эту проблему для моего приложения, я создаю веб-службу, которая будет использоваться для «регистрации» LAN-сервисов, которые я хочу контролировать с помощью своих Android-устройств. Таким образом, я не зависим от наличия многоадресной рассылки на аппаратном обеспечении. – jldupont

7

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

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

  • HTC Desire, 2,2, акции: сбой
  • HTC Desire, 2.3.7, CyanogenMod: успех
  • Motorola Milestone, 2,1 -update1: сбой
  • HTC Desire S, 2.3.3: потерпеть неудачу
  • Acer Iconia A501, 3.2.1: успех
  • Samsung, то 2.3.3: сбой
  • HTC Legend, 2,2 я думаю: не в состоянии

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

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

+0

Спасибо Роб за информацию, я новичок в многоадресной рассылке. Считаете ли вы, что я могу отправить пакет многоадресной передачи с Android-разработчика HTC для API-8 на ПК с ОС Windows? – Ahmed

+0

Уровень API 8 - 2.2, поэтому я думаю, что вы сможете отправить от Desire на ПК, но Desire не сможет ничего получить. –

+0

Спасибо, я попробую, для меня просто отправка будет достаточно, потому что я и андроид - сервер, и клиенты должны его открыть. – Ahmed

1

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

Другое: Компьютер отправить/Recieve в/из Android

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

Смежные вопросы