首页 > 解决方案 > 什么会导致 NsdManager.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对协程和线程或活动与应用程序上下文敏感吗?我想也许我一直在用协程做的一些工作可能导致了它。但是现在即使是生产应用程序也不会onServiceFound仅在此设备上返回任何结果。

是否有可能NsdManager缓存结果并进入不良状态?如果是这样,我该如何重置此状态?以下是我尝试过的一些事情:

标签: androidandroid-networkingservice-discovery

解决方案


等待更长的时间解决了这个问题。也许 48 小时或 24 小时,同时没有电话discoverServices


推荐阅读