我正在尝试使用“网络服务发现”API 访问 android 应用程序中的 mDNS TXT 记录。基本上我的应用程序需要发现服务并从中访问 TXT 记录。
如何从 android 网络服务发现 API 访问 mDNS TXT 记录。是否支持从网络服务发现 API 访问 TXT 记录。
仅通过NsdServiceInfo 上的 getAttributes() 方法在 API 级别 21 (Android 5.0) 中添加了对访问 TXT 记录的支持。
如果您需要支持较旧的 Android 版本,很遗憾您需要使用jmDNS 之类的库来访问 TXT 记录。
正如评论中提到的那样,NsdServiceInfo.getAttributes()方法是访问 TXT 记录,但一个错误意味着 getAttributes() 结果为空。如果您需要 TXT 记录,这会使网络服务发现 API 无用。
我希望谷歌能解决这个问题,因为与例如jmDNS相比,使用 NsdManager在查找服务方面似乎要快得多。同时,如果它有帮助,我开发了一种解决方法,可以在 NsdManager 通知新服务时通过网络手动获取 TXT 记录。这已作为MIT 许可证下的库开源。
我的同事发现了一个很棒的库来绕过这个使用真正的 Apple DNSSD Java API 的错误:
BonjourBrowser是一个很棒的示例应用程序,它使用了 Android 上的所有功能。它也非常适合创建您自己的 mDNS 服务以进行测试。
我尝试了 Steve Lilly 下面提到的 TinyDNSSD,但这对我来说不可用,因为当您的服务没有所有记录时它不起作用。当 fe A-Record 丢失时,它不起作用 (TimeOutException)。