我在为 Android 应用程序使用 JmDNS 库时遇到问题。
由于 Bonjour 不定期发送保持活动消息,因此我每 30 秒关闭和打开一个新的 JmDNS 实例,以便调用 serviceAdded 和 serviceResolved 函数。
但是在这些实例创建之间,如果我关闭并打开 Wifi,虽然 JmDNS 实例的创建成功,但我的 serviceAdded 和 serviceResolved 函数不会被调用。
我的主要疑问是:
1)是否可以一次又一次地重新创建这些实例并因此产生一种轮询?或者,还有更好的方法?
2)如果网络关闭再打开,每次创建JmDNS实例时我需要做些什么吗?
这是我的代码片段:
private void _startJmDnsService() throws IOException {
if (mJmdns != null) {
if (mJmDnsServiceListener != null) {
mJmdns.removeServiceListener(mBonjourServiceType, mJmDnsServiceListener);
mJmDnsServiceListener = null;
}
mJmdns.close();
mJmdns = null;
}
Log.d(TAG, "starting JmDNS");
mJmdns = JmDNS.create(getInet4Address());
mJmDnsServiceListener = new ServiceListener() {
public void serviceResolved(ServiceEvent ev) {
ServiceInfo serviceInfo = ev.getInfo();
Log.w(TAG, "serviceResolved for device " + serviceInfo.getName());
}
public void serviceRemoved(ServiceEvent ev) {
ServiceInfo serviceInfo = ev.getInfo();
Log.w(TAG, "serviceRemoved for device " + serviceInfo.getName());
CDevice.removeDevice(deviceId);
}
public void serviceAdded(ServiceEvent event) {
// Required to force serviceResolved to be called again
// (after the first search)
ServiceInfo serviceInfo = event.getInfo();
Log.w(TAG, "serviceAdded for device " + serviceInfo.getName());
mJmdns.requestServiceInfo(event.getType(), event.getName(), 1);
}
};
mJmdns.addServiceListener(mBonjourServiceType, mJmDnsServiceListener);
Log.w(TAG, "mJmdns Service Listener added!");
}