使用jmDNS取消注册zeroconf服务

时间:2011-05-06 19:07:40

标签: android zeroconf mdns dns-sd

我正在尝试让我的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);
    }

我已经取消了进行多播启用等的代码。重点是,我可以很好地注册服务,然后可以在另一台设备上使用zeroconf浏览器查看它。但是,一旦注册,该服务永远不会消失,除非我实际禁用注册该服务的设备上的wifi。对unregisterService的调用似乎并未实际影响服务注册。 unregisterAllServices似乎也没有任何效果。有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

通过查看JmDNS中的相关代码,我认为您应该从您注册的ServiceInfo实例中取消注册JmDNS。因此,您必须保留注册代码段中的jmdns引用,并在该注册代码中调用取消注册,而不是您在取消注册代码段中创建的新实例。