我试图让我的Android应用程序通过zeroconf注册服务,而应用程序是活跃的,然后取消注册后,应用程序退出。在我的onResume方法中,我有以下代码:
// register ourselves with zero conf
try {
JmDNS jmdns = JmDNS.create();
serviceInfo = ServiceInfo.create("_http._tcp.local.", "My App Service", SERVER_PORT, 0, 0, false, "path=/crazycatapp");
jmdns.registerService(serviceInfo);
} catch (Throwable t) {
Debug.e("Error registering service with zeroconf", t);
}
,然后在onPause方法中:
if(serviceInfo != null) {
// unregister ourselves with zero conf
JmDNS jmdns = JmDNS.create();
jmdns.unregisterService(serviceInfo);
}
} catch (Throwable t) {
Debug.e("Error unregistering service with zeroconf", t);
}
我已经删除了使能多播的代码,等等。关键是,我可以很好地注册服务,并且随后可以在另一台设备上使用zero - conf浏览器查看它。然而,一旦注册,该服务就不会消失,除非我在注册该服务的设备上禁用wifi。对unregisterService的调用似乎实际上并不影响服务注册。unregisterAllServices似乎也没有任何效果。有人有什么想法吗?
从查看JmDNS
中的相关代码,我认为您应该从您注册的相同JmDNS
实例中取消注册您的ServiceInfo
。因此,您必须保持jmdns
引用从您的注册代码片段周围,并调用unregister上的一个,而不是您在注销代码片段中创建的新实例。