Внедрение JmDNS на Android / многопоточность - PullRequest
1 голос
/ 25 марта 2011

Я пытаюсь заставить 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();
    }

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

1 Ответ

1 голос
/ 25 марта 2011

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

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

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

...