iPhone蓝牙通信示例
Posted
技术标签:
【中文标题】iPhone蓝牙通信示例【英文标题】:iPhone Bluetooth Communication Examples 【发布时间】:2012-02-21 22:47:01 【问题描述】:我一直在尝试寻找在 ios 上与蓝牙设备通信的示例,但一直未能成功。据我了解,尚不支持 SPP。在最简单的层面上,我想向我正在创建的蓝牙设备发送一个简单的 1 或 0 信号。 (这是一个蓝牙开关,可以打开和关闭某些东西)。有没有办法通过 HID 或 HFP 配置文件巧妙地做到这一点?
【问题讨论】:
【参考方案1】:您的问题的简短回答是 you can't connect to an arbitrary Bluetooth device 您可能碰巧拥有,您只能连接到通过 Apple 许可计划(即“为 iPod/iPhone 制造”标签)提供的蓝牙设备。来自 Apple 的文档:
问: [外部附件框架允许] 我的应用程序与蓝牙设备进行通信。那么,为什么我的应用程序看不到我 iPhone 旁边的蓝牙配件呢?答:外部配件框架旨在允许 iOS 应用程序仅与在 Apple 下开发的硬件配件通信MFi 被许可人计划。
因此没有公共 API 用于从 iOS 中访问任意蓝牙设备:您必须通过外部附件框架才能通过蓝牙进行通信,而 EAF 的任务是“与 MFi 设备通信”而不是“与任意外部设备通信。”一个足够聪明的开发人员可能会在其中破解一些东西,但是 -
这是一项不平凡的工作 您极不可能通过 App Store 的审批流程因此,其中的百分比并不高 - 这样做的努力不太可能奖励您。
如果已经存在可以强制执行您想做的事情的 MFi 设备,那可能是您最好的机会 - 当然,您不必自己完成 MFi 批准/许可流程。如果你想这样做,那就去做吧,祝你好运。
我回答这个问题迟了,因为 Zeroxide 的回答不正确(您可以在您的 iOS 设备上使用随机蓝牙键盘,因为 Apple 实现了该连接,这与为您提供公共 API 路径不同做同样的事情),我发现 Rokridi 的答案是不完整的,尽管朝着正确的方向前进。
编辑: 已在链接的 Apple 页面中添加了关于 Bluetooth Low-Energy 设备的警告。所以有一个漏洞,但它不是一个大漏洞,因为目前实际生产的蓝牙 LE 设备非常非常少。
【讨论】:
上面引用的技术问答 QA1657 文章还指出:“蓝牙低功耗配件不与外部配件框架接口,也不需要符合 MFi。相反,应用程序使用 CoreBluetooth 框架与iOS 或 OS X 的低功耗蓝牙配件。”【参考方案2】:据我所知,如果您的外部设备不是 iOs 设备,那么您应该使用 External Accessory Framework 与您的应用程序进行通信。因此,您的外部设备应获得 Apple 通过 Made for Ipod 计划 (MFI) 的认证。希望这会有所帮助。
【讨论】:
谢谢。你知道使用这个框架的任何例子吗? 查看此链接developer.apple.com/library/ios/search/?q=eaaccessory。您将找到有关外部附件框架的文档。 Apple 还提供了一个示例演示来展示如何与外部配件建立连接。示例编译并运行,但是如果您想测试给定示例的功能,您需要外部设备。如果您对此框架有任何疑问或信息,请联系我,因为我最近开始开发基于此框架的应用程序。 【参考方案3】:如果您想使用经典蓝牙(不是 BLE),则必须先将 iOS 设备与蓝牙设备配对(在设置中)。如果您不能这样做,那么您将无法通过您的应用与它进行通信。
【讨论】:
我已将我的蓝牙键盘与 iPhone 配对,它工作正常。那么,如何使用 ExternalAccessoryFramework 搜索和获取设备详细信息【参考方案4】:没有。无论设备是否通过 MFi 认证,如果蓝牙配置文件是 HFP 或 HID(普通配置文件。不是 iAP 配置文件),您可以将设备连接到 iphone。想想蓝牙耳机或键盘。需要MFi标志才能使用吗?不。从不。
【讨论】:
这实际上是不正确的:iOS 本身将看到和确认的内容与您的应用程序允许看到的内容之间存在很大差异。 @Zeroxide : 你有连接外部设备的示例代码吗? @Zeroxid : 如何使用 HID 蓝牙配置文件连接外部设备? . HID 配置文件用于键盘输入。 MFi 程序必须需要经过 MFi 认证的设备才能建立连接和进一步通信。其他明智的目标设备必须是 Low Energy,然后您可以使用 CoreBluetooth 框架进行通信。以上是关于iPhone蓝牙通信示例的主要内容,如果未能解决你的问题,请参考以下文章
CoreBluetooth 框架能否与从属蓝牙 2.0 串行模块配对并通信?