android - 什么会导致 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
缓存结果并进入不良状态?如果是这样,我该如何重置此状态?以下是我尝试过的一些事情:
- 卸载/重新安装
- 清除应用程序存储
- 忘记wifi网络并重新连接
- 等待 24 小时
解决方案
等待更长的时间解决了这个问题。也许 48 小时或 24 小时,同时没有电话discoverServices
。
推荐阅读
- google-apps-script - 如何获得两列等于特定值的行
- node.js - 在 OSX 上安装 Node 时遇到这些错误时我错过了什么?
- ruby-on-rails - VSCode 抱怨 Ruby UTF-8 文件具有无效的多字节字符(US-ASCII)
- dart - 如何在服务器上部署 Flutter Web?
- swagger - 如何使用 swagger-ui?
- python-3.x - 如何在没有数字系统的情况下使用海龟在 Python 中制作井字游戏?
- c - 在动态链接中,动态加载器是查看所有目标文件的定义,还是只查看可执行文件指定的目标文件?
- pyspark - 修复另一列中的值时,查找数据框中列的所有可能组合
- python - 如何在没有更改参数值的返回值的情况下模拟/修补函数?
- git - 是否可以阻止 Visual Studio Code 创建 `.vscode` 文件?