Android可以通过蓝牙支持Zeroconf / Bonjour吗? TCP / IP怎么样?

时间:2011-12-02 09:49:38

标签: java android networking bluetooth zeroconf

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

在Android上有可能吗?

我知道有jmDNS,但从我的理解,它只能通过WiFi /网络, 蓝牙。

由于

由Seva Alekseyev编辑,他提供了赏金:我不是在解决方法之后(比如Zeroconf sans Bluetooth或Bluetooth sans Zeroconf)。我追求真实的东西。

3 个答案:

答案 0 :(得分:3)

不在蓝牙上,因为Android目前不支持蓝牙上的TCP / IP,并且Android的原生NSD支持(network service discovery)通过IP工作。

但是,它可以通过Wi-Fi工作。此外,Android支持通过Wi-Fi Direct进行服务发现,与蓝牙相比,它可以提供更大的范围和电池效率。有关如何将服务发现集成到wi-fi直接启用应用程序的指南,请查看Android Training lesson

  

此答案的部分内容已从我们的Dear Android video response复制到此问题

答案 1 :(得分:0)

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

以下是android dnssd的示例: https://github.com/twitwi/AndroidDnssdDemo

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

答案 2 :(得分:0)

有几个原因导致目前无法做到这一点。与您的问题最相关的一点是 - 正如您可能经历的那样 - jmDNS需要TCP / IP链接来发布或浏览服务(它需要绑定的IP地址)。正如其他答案&注释状态,您需要一个已建立的PANU链接,Android目前没有提供。

其他不起作用的原因是:

  • Apple使用一些机制来确保iOS设备只与其他iOS设备通信。因此,即使你让Android在蓝牙上使用Bonjour,它也只适用于Android-to-Android。
  • MFi计划中的Apple认证设备有一个由Apple提供的特殊加密芯片。我不确定这是否适用于Bonjour-over-Bluetooth连接,但我认为确实如此。

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