什么会导致 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.onDiscoverStarteddiscoveryListener.onDiscoveryStopped 按预期被回调。没有 discoveryListener.onStartDiscoveryFailed 失败。但是 discoveryListener.onServiceFound 再也不会被回调了。相同的代码在同一 wifi 网络上的 Galaxy S9(Android 10)上运行良好。相同的代码在 Pixel 3 上运行良好(直到昨天)。

NsdManager 是否对协程和线程或活动与应用程序上下文敏感?我想也许我一直在用协程做的一些工作可能导致它。但现在,即使是生产应用也不会仅在此设备上返回任何 onServiceFound 结果。

是否有可能 NsdManager 缓存结果并进入错误状态?如果是这样,我如何重置此状态?以下是我尝试过的一些方法:

  • 卸载/重新安装
  • 清除应用存储空间
  • 忘记 wifi 网络并重新连接
  • 等待 24 小时

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...