Обнаружение прямого сервиса Android Wifi

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

У меня есть действительный объект Channel, DnsSdServiceResponseListener и DnsSdTxtRecordListener, и я установил их с помощью этого вызова:

mManager.setDnsSdResponseListeners(channel, servListener, txtListener);

На данный момент оба слушателя просто выдают некоторую информацию об отладке, чтобы все было по-настоящему просто.

Проблема в том, что мой DnsSdServiceResponseListener никогда не вызывается, но DnsSdTxtRecordListener вызывается, и все переданные аргументы выглядят законными. Как можно одного назвать, а другого нет?

Я тестирую два реальных устройства, оба работают под управлением Android 4.2.2.

Спасибо!


person Greg Neiheisel    schedule 08.03.2013    source источник


Ответы (1)


Наконец-то разобрался.. вроде. При получении экземпляра запроса на обслуживание я указывал имя и тип экземпляра службы, чтобы они соответствовали значениям, использованным при создании службы...

Регистрация услуги: mServiceInfo = WifiP2pDnsSdServiceInfo.newInstance(Consts.SERVICE_INSTANCE, Consts.SERVICE_REG_TYPE, record);

Создание заявки на обслуживание: mServiceRequest = WifiP2pDnsSdServiceRequest.newInstance(Consts.SERVICE_INSTANCE, Consts.SERVICE_REG_TYPE);

Я удалил аргументы метода newInstance при получении запроса на обслуживание... mServiceRequest = WifiP2pDnsSdServiceRequest.newInstance();

и сейчас вызываются оба слушателя. Кажется, что мой первый метод будет отфильтровывать другие службы, транслируемые поблизости, поэтому я изначально выбрал эту перегрузку.

person Greg Neiheisel    schedule 09.03.2013
comment
Время сэкономлено. Я застрял в той же проблеме. Спасибо - person Alex Hong; 20.09.2018