我想让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在创建它来运行其任务时会产生自己的线程,所以我试图使用一个处理程序和runnable来发送包含变量的消息,但我似乎无法正确使用它。有人可以帮忙吗?
答案 0 :(得分:1)
我认为您只想使用传递给服务添加方法的ServiceEvent事件对象。它拥有您需要的所有信息。
从我们的开源应用程序
中查看此示例