iPhone如何通过无线或蓝牙访问另一个非iPhone设备?

28
我正在尝试弄清楚iPhone是否可以通过无线或蓝牙连接到另一个非iPhone设备,并且看到了相互矛盾的信息。我发现的大部分内容都是在3.0版本的SDK发布之前,当时这是不可能的。查看Stack Overflow的问题,例如“iPhone 3.0 SDK能否提供对蓝牙设备(耳机)的完全访问权限?”,提到除非它是“适用于iPhone”的设备的一部分,否则无法连接到任意设备。我需要参与此计划的硬件吗?
在查阅苹果文档“点对点连接”时,它提到连接两个iPhone,而不是将iPhone连接到另一个蓝牙设备。然后还有一些文章,如“iPhone SDK焦点:蓝牙增强功能”,其中包括以下引用:
“...并且具有新宣布的“标准支持”,应该允许在iPhone和计算机之间以及附近的iPhone之间进行文件传输。”
另一个 Stack Overflow 的问题,iPhone SDK 3.0 中的 GameKit,提到了 Bonjour,而Apple 对 Bonjour 的文档则讲述了连接到 Bonjour 设备的方法,但是 iPhone 能否连接到任何 Bonjour 设备呢?它必须要有 Wi-Fi 连接,还是可以使用蓝牙?即使我可以使用蓝牙连接到另一个设备,我相信第一代 iPhone 和 iTouch 上不可用。这是正确的吗?我正在考虑开发一个需要与区域内其他非 iPhone 设备通信的 iPhone 应用程序,可能使用蓝牙,但也可能使用直接无线连接。这种方法的可能性和限制是什么?iPhone 不能连接到任意蓝牙设备吗?其他设备是否必须在无线 Bonjour 网络上?我试图弄清楚这是否可行,或者它是否值得努力。
3个回答

12
在iPhone OS 3.0中,通过外部附件框架与其他蓝牙设备通信的唯一方式是它们必须在为iPod配件定制计划中。尽管它们通过标准蓝牙连接进行通信,但配件需要特殊硬件来处理来自iPhone/iPod touch的数据流。不幸的是,这意味着您无法在iPhone OS 3.0上使用与通用蓝牙设备通信的想法。
如果您要通信的设备可以通过Wi-Fi进行Bonjour发现,则无需成为为iPod配件定制计划的一部分。但是,这似乎并不适用于您的情况。
不久的将来,第三方开发人员可能会生产通过30针连接器口连接并提供对现有蓝牙设备访问权限的转接器。如果这些开发人员打开其通信协议,那么可能实现您与这些设备通信的目标。

谢谢提供的信息 - 我读得越多,就越认为蓝牙不是可行的选择,除非设备在Made for iPod计划中。至于Bonjour,iPhone / iTouch必须连接到无线网络才能发现Bonjour设备吗? Bonjour有任何范围限制吗,还是只取决于其他设备可以广播的范围? - Tai Squared
Bonjour只是一个发现协议,因此其范围取决于您的网络范围。它旨在用于局域网,这基本上意味着iPhone必须连接到WiFi网络。设备本身可以通过有线或其他方式连接到网络。 - Brad Larson
1
不,iPhone 不必连接到 WiFi 网络:它将使用系统上可用的 任何 网络设备 - 特别是蓝牙。从 iOS6 开始,苹果默认禁用 Bonjour 的蓝牙查找功能(苹果对此变更的解释和官方解决方法说明请参见 https://developer.apple.com/library/ios/qa/qa1753/_index.html#//apple_ref/doc/uid/DTS40011315)。 - Adam

1

在 iPhone 上,您可以使用 NSStream 打开 IPv4/IPv6 套接字。您连接的设备不一定是 iPhone 或必须使用 Wi-Fi。由于网络通信协议的布局方式,您只需要关心 iPhone 与哪种设备进行通信即可。

另一方面,Bonjour 在内部使用 NSStream。它基本上是一个巧妙的小包装器,允许自动发现。您需要在所有要参与自动发现过程的设备上安装 Bonjour 协议。甚至还有一个 Windows 实现。


很抱歉问了这么多问题 - 根本问题是iPhone能否连接到任意设备。例如,如果应用程序用于读取电表,我希望能够走进一个房间并连接到任何给定的电表,而不需要知道任何关于特定电表的信息(蓝牙ID、IP地址等)。似乎通过Bonjour是可能的(如果电表支持该协议),但不是通过蓝牙。这是正确的吗?要连接到另一个Bonjour设备,iPhone是否需要连接到无线网络或通过蓝牙连接?似乎并不需要。 - Tai Squared
如果我理解正确,您正在询问如何获取 iPhone 范围内所有蓝牙仪表的列表?我知道蓝牙设备可以自动发现彼此,但我不认为它们使用 Bonjour(Zeroconf)来完成。我非常确定该协议本身是蓝牙特定的。这听起来是一个相当酷的项目! - Andrei Tanasescu
你可能想要投入时间学习外部附件框架,该框架是在3.0版本中发布的。 - Andrei Tanasescu
是的,我想找到所有范围内的蓝牙设备并进行数据收发。根据苹果文档,似乎只能连接其他iPhone,但你说它可以自动发现其他设备。这是真的吗? - Tai Squared

0
作为 iPhone OS 3.0 SDK 的一部分,苹果宣布可以通过蓝牙或者底座连接器控制硬件附件。底座连接器支持标准协议(例如播放、暂停等),同时也支持开发者想要实现的任何自定义协议。
至于通过蓝牙连接,您可以与其他 iPhone 或其他设备进行通信。例如,您可以使用立体声蓝牙连接兼容的蓝牙立体声耳机、车载套件或其他配件。
就蓝牙通信所支持的设备而言,除了第一代 iPod Touch 以外,其他所有设备都应该没问题。
另请参见 苹果关于 iPhone OS 附件的页面

1
这些都是“Made for iPhone”设备。这是连接蓝牙设备的唯一方式吗?此外,根据苹果文档,原始iPhone或第一代iPod Touch不支持蓝牙网络。模拟器也不支持。 - Tai Squared
那个链接到 iPhone OS 配件的页面似乎已经失效了。 - ThomasW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接