使用jmDNS注销zeroconf服务



我试图让我的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上的一个,而不是您在注销代码片段中创建的新实例。

最新更新