Java Android可以通过蓝牙支持Zeroconf/Bonjour吗?TCP/IP呢?

Java Android可以通过蓝牙支持Zeroconf/Bonjour吗?TCP/IP呢?,java,android,networking,bluetooth,zeroconf,Java,Android,Networking,Bluetooth,Zeroconf,在iPhone上,如果我创建自定义服务,例如“_test._tcp.local”。在早上好的时候,我可以通过WiFi或/和蓝牙搜索/广播此服务 这在Android上是可能的吗 我知道有jmDNS,但据我所知,它只能通过WiFi/网络工作, 不是蓝牙 谢谢 编辑:Seva Alekseyev,他提供了赏金:我不是在寻找解决办法(比如Zeroconf无蓝牙或蓝牙无Zeroconf)。我追求的是真实的东西。您可以使用和创建类似于TCP的蓝牙套接字 以下是android dnssd的示例: 您可能需要

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

这在Android上是可能的吗

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

谢谢

编辑:Seva Alekseyev,他提供了赏金:我不是在寻找解决办法(比如Zeroconf无蓝牙或蓝牙无Zeroconf)。我追求的是真实的东西。

您可以使用和创建类似于TCP的蓝牙套接字

以下是android dnssd的示例:


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

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

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

  • 苹果公司使用了几种机制来确保iOS设备只与其他iOS设备通话。所以,即使你让安卓通过蓝牙跟你说“你好”,它也只能在安卓和安卓之间工作
  • MFi计划中的苹果认证设备有一个由苹果提供的特殊加密芯片。我不确定这是否也适用于通过蓝牙连接的Bonjour,但我假设它适用

你可以转而考虑使用Bluetooth 4 LE——至少有一个苹果API从iOS 5开始提供从配置文件,并扩展到支持iOS 6中的主配置文件。

不支持蓝牙,因为安卓目前不支持通过蓝牙的TCP/IP,安卓的本机NSD支持()通过IP工作

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

这个答案的一部分从我们的答案复制到这个问题


我很想知道关于蓝牙的答案…JmDNS是否可以检测蓝牙公开的bonjour服务?让我们从基础开始:在Android中有没有通过蓝牙运行TCP/IP的方法?如果是这样的话,您可能能够在该特定接口上使用JmDNS。可能只是曝光,而不是发现,反之亦然。相关:相关:尚未发布android的PAN配置文件。代码存在于项目中,但隐藏。有一些类像BluetoothPan for PAN profile,但developersUm不会使用,我最终会将iOS转换为Android,反之亦然服务发现。我不认为它们可以互操作,因为iOS的实现是基于TCP/IP的。是的,这是一个很高的可能性,但文档说它类似于TCP套接字。。因此,请试一试。该示例没有声明蓝牙兼容性,也没有实现它。我已经在我的应用程序中集成了JmDNS一段时间了;通过WiFi上的TCP/IP,它可以与iOS通话。现在,仅仅因为接口相似,并不意味着RFCOMM套接字可以与TCP/IP套接字通信。那是不同的交通工具。我对BT的了解还不够,不知道是否有可能在Android的堆栈上从头开始重新实现TCP/IP。。。您可以直接与蓝牙微控制器对话,并与它对话HCI,这可以让您做任何事情,但这只有在您是root用户时才可能。内核的所有这些的公共API都是基于套接字的。不幸的是,蓝牙中的原始套接字不是很有用,为了做任何有趣的事情,您还必须与本地SDP服务器交谈,该服务器使用godsdamned dbus,而不是任何合理的协议。