Внедрение JmDNS на Android / многопоточность

1

Я пытаюсь заставить JmDNS работать в моей программе Android. Я могу получить его, чтобы обнаружить устройства, которые я хочу, но я не совсем понимаю, как получить информацию от JmDNS к объекту, который запустил задачу JmDNS. Вот мой код.

 protected void browse() {       
      try {
        jmdns = (JmDNSImpl) JmDNS.create();

        jmdns.addServiceListener(type, listener = new ServiceListener() {
            public void serviceResolved(ServiceEvent ev) {

            }
            public void serviceRemoved(ServiceEvent ev) {                   

            }
            public void serviceAdded(ServiceEvent event) {    
                DNSEntry addressEntry = jmdns.getCache().getDNSEntry(name, DNSRecordType.TYPE_A, DNSRecordClass.CLASS_ANY);
                if (addressEntry instanceof DNSRecord) {
                    ServiceInfo cachedAddressInfo = ((DNSRecord) addressEntry).getServiceInfo(true);
                    if (cachedAddressInfo != null) {
                        for (Inet4Address address : cachedAddressInfo.getInet4Addresses()) {
                          //I need to get the address that is here back out of this listener to the main thread
                        }
                    }
                }
            }

        });
    } catch (IOException e) {
        e.printStackTrace();
    }

Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть объект диспетчера служб, у которого есть экземпляр объекта браузера, в котором есть метод просмотра. Я не могу получить доступ к объекту диспетчера служб к переменной адреса. Поскольку JmDNS порождает собственный поток, когда он создан для выполнения своих задач, я попытался использовать обработчик и запустить для отправки сообщений с переменной в нем, но я, похоже, не ошибаюсь. Может ли кто-нибудь помочь?

Теги:
multithreading
jmdns

1 ответ

1
Лучший ответ

Я думаю, вы хотите просто использовать объект события ServiceEvent, переданный в метод добавленной службы. Он имеет всю необходимую информацию.

См. этот пример из нашего приложения с открытым исходным кодом

http://code.google.com/p/tunesremote-plus/source/browse/trunk/src/org/tunesremote/LibraryActivity.java

  • 0
    Да, именно так оно и должно работать, но по какой-то причине JmDNS не может разрешить IP-адрес нужного мне типа службы, поэтому мне действительно нужно копаться в кеше JmDNS, чтобы получить IP-адрес, под которым ему удалось получить доступ. другой тип сервиса.
  • 0
    Вы не должны делать это. IP-адрес должен быть доступен в списке. У объекта event.ServiceInfo есть два метода для getIP4VAddresses () и getIPV6Addresses (), которые должны абсолютно работать.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню