Я пытаюсь заставить 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 порождает собственный поток, когда он создан для выполнения своих задач, я попытался использовать обработчик и запустить для отправки сообщений с переменной в нем, но я, похоже, не ошибаюсь. Может ли кто-нибудь помочь?
Я думаю, вы хотите просто использовать объект события ServiceEvent, переданный в метод добавленной службы. Он имеет всю необходимую информацию.
См. этот пример из нашего приложения с открытым исходным кодом