什么会导致 NsdManager.discoverServices() 停止在特定设备上查找服务?
What would cause NsdManager.discoverServices() to stop finding services on a particular device?
这是我的代码:
private val nsdManager = (context.getSystemService(Context.NSD_SERVICE) as NsdManager)
fun go() {
val discoveryListener = object : NsdManager.DiscoveryListener { ... }
nsdManager.discoverServices("_sonos._tcp.", NsdManager.PROTOCOL_DNS_SD, discoveryListener)
}
这段代码已经运行了好几个月,但昨天它刚刚停止在 Pixel 3 上运行(Android 11,1 月 5 日安全补丁)。 discoveryListener.onDiscoverStarted
和 discoveryListener.onDiscoveryStopped
按预期得到回调。没有 discoveryListener.onStartDiscoveryFailed
失败。但是 discoveryListener.onServiceFound
再也不会被回调了。相同的代码在同一 wifi 网络上的 Galaxy S9 (Android 10) 上运行良好。相同的代码在 Pixel 3 上运行良好(直到昨天)。
NsdManager
是否对协同程序和线程或 Activity 与应用程序上下文敏感?我想也许我一直在用协程做的一些工作可能导致了它。但现在即使是正式版应用程序也不会 return 任何 onServiceFound
结果仅在此设备上。
有没有可能是NsdManager
缓存结果进入了一个坏状态?如果是这样,我该如何重置此状态?以下是我尝试过的一些方法:
- uninstall/reinstall
- 清除应用存储空间
- 忘记 wifi 网络并重新连接
- 等待 24 小时
等待更长的时间修复了这个问题。可能 48 小时或 24 小时同时没有呼叫 discoverServices
。
这是我的代码:
private val nsdManager = (context.getSystemService(Context.NSD_SERVICE) as NsdManager)
fun go() {
val discoveryListener = object : NsdManager.DiscoveryListener { ... }
nsdManager.discoverServices("_sonos._tcp.", NsdManager.PROTOCOL_DNS_SD, discoveryListener)
}
这段代码已经运行了好几个月,但昨天它刚刚停止在 Pixel 3 上运行(Android 11,1 月 5 日安全补丁)。 discoveryListener.onDiscoverStarted
和 discoveryListener.onDiscoveryStopped
按预期得到回调。没有 discoveryListener.onStartDiscoveryFailed
失败。但是 discoveryListener.onServiceFound
再也不会被回调了。相同的代码在同一 wifi 网络上的 Galaxy S9 (Android 10) 上运行良好。相同的代码在 Pixel 3 上运行良好(直到昨天)。
NsdManager
是否对协同程序和线程或 Activity 与应用程序上下文敏感?我想也许我一直在用协程做的一些工作可能导致了它。但现在即使是正式版应用程序也不会 return 任何 onServiceFound
结果仅在此设备上。
有没有可能是NsdManager
缓存结果进入了一个坏状态?如果是这样,我该如何重置此状态?以下是我尝试过的一些方法:
- uninstall/reinstall
- 清除应用存储空间
- 忘记 wifi 网络并重新连接
- 等待 24 小时
等待更长的时间修复了这个问题。可能 48 小时或 24 小时同时没有呼叫 discoverServices
。