21

如果我在 iPhone 上创建自定义服务,例如“_test._tcp.local”。在 Bonjour 中,我可以通过 WiFi 或/和蓝牙搜索/广播此服务。

在安卓上可以吗?

我知道有 jmDNS,但据我了解,它只能通过 WiFi/网络工作, 而不是蓝牙。

谢谢

由提供赏金的 Seva Alekseyev 编辑:我不寻求解决方法(例如 Zeroconf sans Bluetooth 或 Bluetooth sans Zeroconf)。我追求的是真实的东西。

4

3 回答 3

3

不在蓝牙上,因为 Android 目前不支持通过蓝牙的 TCP/IP,并且 Android 的原生 NSD 支持(网络服务发现)通过 IP 工作。

但是,它确实可以通过 Wi-Fi 工作。此外,Android 支持通过 Wi-Fi Direct 进行服务发现,这为您提供比蓝牙更大的范围和电池效率。有关如何将服务发现集成到支持 wi-fi direct 的应用程序的指南,请查看Android 培训课程

此答案的部分内容来自我们对这个问题的尊敬的 Android 视频回复

于 2012-10-25T17:48:19.753 回答
0

目前无法做到这一点有几个原因。与您的问题最相关的一个问题是 - 正如您可能遇到的那样 - jmDNS 需要 TCP/IP 链接来发布或浏览服务(它需要绑定 IP 地址)。正如其他答案和评论所述,您需要一个已建立的 PANU 链接,Android 目前不提供该链接。

它不起作用的其他原因是:

  • Apple 使用了几种机制来确保 iOS 设备只会与其他 iOS 设备通信。因此,即使您让 Android 使用蓝牙连接 Bonjour,它也只能在 Android 到 Android 之间工作。
  • MFi 计划中经过 Apple 认证的设备具有由 Apple 提供的特殊加密芯片。我不确定这是否也适用于 Bonjour-over-Bluetooth 连接,但我认为确实如此。

您可以改为考虑使用蓝牙 4 LE - 至少从 iOS 5 开始有一个 Apple API 提供从属配置文件,并在 iOS 6 中扩展为支持主配置文件。

于 2012-10-08T10:27:56.397 回答
0

您可以使用BluetoothSocketBluetoothServerSocket通过蓝牙创建类似 TCP 的套接字。

这是一个 android dnssd 示例: https ://github.com/twitwi/AndroidDnssdDemo

您可能需要修改 jmdns 库,以便在蓝牙打开时创建蓝牙套接字,否则创建简单套接字。将套接字通信封装在有条件地创建套接字的不同类中。

于 2012-08-05T09:48:00.000 回答