2011-12-02 84 views
20

在iPhone上创建自定义服务,例如“_test._tcp.local”。在Bonjour,我可以通过WiFi或/和蓝牙寻求/广播这项服务。Android可以通过蓝牙支持Zeroconf/Bonjour吗? TCP/IP如何?

有可能在Android?

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

感谢

编辑由塞瓦·阿列克谢耶夫,谁提供的赏金:我不是解决方法后(如零配置SANS蓝牙或蓝牙SANS零配置)。我追求真实的东西。

+0

重复我很好奇,想知道关于蓝牙答案......是JmDNS alowed检测通过蓝牙暴露的Bonjour服务? – fvisticot

+0

让我们从基础开始:有没有办法在Android上通过蓝牙运行TCP/IP?如果是这样,那么可以在该特定接口上选择JmDNS。也许只是曝光,而不是发现,反之亦然。 –

+0

相关:[Linux上的蓝牙TCP/IP](http://giovanni.wordpress.com/2007/04/06/how-to-use-tcpip-over-bluetooth/) –

回答

0

您可以使用BluetoothSocketBluetoothServerSocket创建TCP像蓝牙插座。

下面是Android的dnssd样本: https://github.com/twitwi/AndroidDnssdDemo

您可能需要修改jmdns库,使得它创建蓝牙套接字蓝牙功能是否打开,否则将创建简单的插座。将套接字通信封装在另一个可有条件创建套接字的类中。

+0

恩,我最终在iOS到Android之后,反之亦然服务发现。我不认为这些将互操作,因为iOS实现是基于TCP/IP的。 –

+0

是的,这是一个很高的概率,但文档说它类似于TCP套接字。所以试试看吧。 – Ronnie

+0

该示例没有声明蓝牙兼容性并没有实现它。我现在将JmDNS集成到我的应用程序中了一段时间;通过WiFi上的TCP/IP,它可以与iOS通话。现在,仅仅因为接口类似,并不意味着RFCOMM套接字可以与TCP/IP协议进行通信。那些是不同的运输。我不知道BT是否有可能在Android的堆栈之上重新实现TCP/IP。 –

0

有几个原因,这是不可能的现在。与你的问题最相关的是 - 正如你可能经历的那样 - jmDNS需要一个TCP/IP链接来发布或浏览服务(它需要一个绑定的IP地址)。正如其他答案&评论状态,你需要一个建立的PANU链接,Android目前不提供。

它不会工作的其他原因有:

  • 苹果使用了几个机制,以确保iOS设备只会与其他iOS设备。所以即使你让Android进入Bonjour-over-Bluetooth,它也只能用于Android-to-Android。
  • MFi程序中的Apple认证设备有一个由Apple提供的特殊加密芯片。我不确定这是否也适用于Bonjour-over-Bluetooth连接,但我认为它确实如此。

你可以改为考虑使用蓝牙4.0 LE - 至少有针对开始在iOS 5中提供了一个从配置文件,并扩展用于支持主配置文件中的iOS 6

3

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

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

部分是从我们Dear Android video response这个问题