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

发布于 2024-12-19 02:27:23 字数 267 浏览 2 评论 0原文

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

安卓上可以吗?

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

感谢

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

On iPhone if I create custom service for example "_test._tcp.local." in Bonjour I can seek/broadcast this service through WiFi or/and Bluetooth.

It is possible on Android ?

I know that there is jmDNS but from what I understand it works only through WiFi/Network,
not Bluetooth.

Thanks

EDIT by Seva Alekseyev, who offered the bounty: I'm not after workarounds (like Zeroconf sans Bluetooth or Bluetooth sans Zeroconf). I'm after the real thing.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

困倦 2024-12-26 02:27:23

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

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

此答案的部分内容来自我们的亲爱的 Android 视频对此问题的回答

Not on bluetooth, because Android currently doesn't support TCP/IP over bluetooth, and Android's native NSD support (network service discovery) works over IP.

It DOES, however, work over Wi-Fi. Also, Android supports service discovery over Wi-Fi Direct, which gives you greater range and battery efficiency than bluetooth. For a guide on how to integrate service discovery into a wi-fi direct enabled application, check out the Android Training lesson.

Portions of this answer are duplicated from our Dear Android video response to this question

勿挽旧人 2024-12-26 02:27:23

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

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

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

You can use BluetoothSocket and BluetoothServerSocket to create TCP like sockets over Bluetooth.

Here is a sample of android dnssd :
https://github.com/twitwi/AndroidDnssdDemo

You may need to modify the jmdns library such that it creates bluetooth sockets if bluetooth is ON, otherwise creates simple sockets. Encapsulate the socket communication in a different class that creates socket conditionally.

戴着白色围巾的女孩 2024-12-26 02:27:23

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

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

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

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

There's a couple of reasons why this is not possible currently. The one most related to your question is that - as you probably experienced - jmDNS requires a TCP/IP link to publish or browse services (it requires an IP address to bind to). As the other answers & comments state, you'd need an established PANU link for that, which Android currently doesn't provide.

The other reasons it will not work are:

  • Apple uses a couple of mechanisms to assure iOS devices will only talk to other iOS devices. So even if you'd get Android into talking Bonjour-over-Bluetooth, it would only work Android-to-Android.
  • Apple certified devices in the MFi program have a special crypto chip which is supplied by Apple. I'm not sure if this applies to Bonjour-over-Bluetooth connections as well, but I'd assume it does.

You could instead look into using Bluetooth 4 LE - at least there's an Apple API for that starting in iOS 5 providing a Slave profile, and extended to support a Master profile in iOS 6.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文