gpt4 book ai didi

android - 使用 jmDNS 注销 zeroconf 服务

转载 作者:行者123 更新时间:2023-11-29 02:13:26 24 4
gpt4 key购买 nike

我试图让我的 Android 应用程序在应用程序处于 Activity 状态时通过 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 似乎也没有任何效果。有人有什么想法吗?

最佳答案

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

关于android - 使用 jmDNS 注销 zeroconf 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5915919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com