Android 6.0系统NsdServiceInfo解析后attributes为空问题咨询
问题结论
这是Android 6.0系统NSD_SERVICE的原生缺陷,你的POC代码没有逻辑问题。
缺陷原因
Android 6.0 版本的系统NsdManager内部实现存在未修复的bug:虽然getAttributes方法在API 21就已公开,但系统NSD服务在解析DNS-SD的TXT记录时,没有将解析得到的键值对写入NsdServiceInfo的attributes字段,无论服务端TXT记录是否正常,最终返回的属性集合都是空值。该bug在Android 7.0(API 24)版本的AOSP代码中被官方修复,因此Android 7及以上版本运行你的代码都能正常拿到attributes。
适配方案
- 方案1:替换系统原生NSD接口,使用第三方DNS-SD实现自行实现局域网服务发现逻辑,第三方实现不受系统版本缺陷影响,各版本表现一致。
- 方案2:若业务场景不需要依赖服务属性做设备校验,可以仅在Android 6.0上使用服务名、IP、端口三个核心字段做设备识别,Android 7及以上版本仍保留attributes校验逻辑。
内容的提问来源于stack exchange,提问作者rolandl
相关产品推荐
相关产品推荐

