我想每5秒扫描一次Bonjour设备(_http._tcp.local.
)并获得一个带有找到的设备(名称,字符串)的arraylist。我需要在服务(以及后台线程)中完成它。
现在我每隔5秒钟就会创建一个新的JmDNS实例(JmDNS.create()
)并泄漏内存;)。
我认为必须有更好的方法来做到这一点,但我不知道......谁可以帮助我?
try {
final JmDNS jm;
ArrayList<String> foundDevices = new ArrayList<String>();
jm = JmDNS.create();
jm.addServiceListener("_http._tcp.local.", listener = new ServiceListener() {
@Override
public void serviceAdded(ServiceEvent event) {
jm.requestServiceInfo(event.getType(), event.getName(), 1);
}
@Override
public void serviceRemoved(ServiceEvent event) {
}
@Override
public void serviceResolved(ServiceEvent event) {
JSONObject obj = null;
ServiceInfo info = event.getInfo();
//Log.e("TCLogging", "RAW: " + info);
String Name = info.getName();
foundDevices.add(Name);
} catch (Exception e) {
Log.e("TCLogging", "Error");
}
}
});
ServiceInfo serviceInfo = ServiceInfo.create("_http._tcp.", "TC_" + android.os.Build.MODEL, 0, "AndroidApp");
jm.registerService(serviceInfo);
} catch (Exception e) {
Log.e("TCLogging", e.toString());
}
答案 0 :(得分:1)
您可以每N秒调用JmDNS.list(String type),这将返回它找到的服务的ServiceInfo。第一次调用需要时间(您可以通过overload列表(字符串类型,长超时)来控制它,默认值似乎是6秒。
答案 1 :(得分:0)
我对JmDNS不了解的一点是,当设备被发现或在网络中消失时,您会收到通知。我想每隔N秒扫描一次,看看网络中有哪些设备。但是等到你收到任何设备更改的通知之后,它会更容易(并且资源密集程度更低)。
接受的答案确实对我来说每N秒实现一次扫描,但这不是最理想的方法!