如果我在 iPhone 上创建自定义服务,例如“_test._tcp.local”。在 Bonjour 中,我可以通过 WiFi 或/和蓝牙搜索/广播此服务。
在安卓上可以吗?
我知道有 jmDNS,但据我了解,它只能通过 WiFi/网络工作, 而不是蓝牙。
谢谢
由提供赏金的 Seva Alekseyev 编辑:我不寻求解决方法(例如 Zeroconf sans Bluetooth 或 Bluetooth sans Zeroconf)。我追求的是真实的东西。
如果我在 iPhone 上创建自定义服务,例如“_test._tcp.local”。在 Bonjour 中,我可以通过 WiFi 或/和蓝牙搜索/广播此服务。
在安卓上可以吗?
我知道有 jmDNS,但据我了解,它只能通过 WiFi/网络工作, 而不是蓝牙。
谢谢
由提供赏金的 Seva Alekseyev 编辑:我不寻求解决方法(例如 Zeroconf sans Bluetooth 或 Bluetooth sans Zeroconf)。我追求的是真实的东西。
不在蓝牙上,因为 Android 目前不支持通过蓝牙的 TCP/IP,并且 Android 的原生 NSD 支持(网络服务发现)通过 IP 工作。
但是,它确实可以通过 Wi-Fi 工作。此外,Android 支持通过 Wi-Fi Direct 进行服务发现,这为您提供比蓝牙更大的范围和电池效率。有关如何将服务发现集成到支持 wi-fi direct 的应用程序的指南,请查看Android 培训课程。
此答案的部分内容来自我们对这个问题的尊敬的 Android 视频回复
目前无法做到这一点有几个原因。与您的问题最相关的一个问题是 - 正如您可能遇到的那样 - jmDNS 需要 TCP/IP 链接来发布或浏览服务(它需要绑定 IP 地址)。正如其他答案和评论所述,您需要一个已建立的 PANU 链接,Android 目前不提供该链接。
它不起作用的其他原因是:
您可以改为考虑使用蓝牙 4 LE - 至少从 iOS 5 开始有一个 Apple API 提供从属配置文件,并在 iOS 6 中扩展为支持主配置文件。
您可以使用BluetoothSocket和BluetoothServerSocket通过蓝牙创建类似 TCP 的套接字。
这是一个 android dnssd 示例: https ://github.com/twitwi/AndroidDnssdDemo
您可能需要修改 jmdns 库,以便在蓝牙打开时创建蓝牙套接字,否则创建简单套接字。将套接字通信封装在有条件地创建套接字的不同类中。