用iPhone控制蓝牙音频设备

时间:2012-07-03 11:28:21

标签: iphone objective-c ios bluetooth avrcp

我正在寻找能够控制汽车收音机和CD播放器的iPhone应用程序。收音机和播放器可以使用蓝牙连接。

我开始这个问题是为了获得这个地方所需的所有信息。我有几个问题,但是如果你发现任何我没有要求我开始开发这个应用程序的重要事项,请告诉我。

我已经阅读了有关AVRCP配置文件和汽车蓝牙设备支持AVRCP 1.3,这对我来说已经足够了,考虑到可以在该协议版本中执行的控制。

我读了很多关于“Apple设备只能互相交互”的人,“Apple设备无法通过蓝牙连接到非Apple设备”,“MFi程序是必须的,如果你想这样做” ,“不需要MFi”等。我的第一个问题是:

1)甚至可以通过蓝牙控制iPhone(4,4S)与汽车中的收音机和CD播放器以及任何iPhone版本的控制广播电台和音乐吗?如果是,那么成功建立这种蓝牙有什么限制?

关于iPhone可以工作的角色的信息也很少。对于AVRCP,有两种角色:控制器和目标角色。通过阅读本文:https://developer.apple.com/hardwaredrivers/BluetoothDesignGuidelines.pdf我没有找到第二个问题的答案:

2)iPhone可以作为控制器并将AVRCP 1.3中规定的所有可用命令发送到目标设备(收音机和CD播放器)吗?

我还想了解这个特定问题的可用框架。我知道有几个,但如果有人认出我的问题是正确的,我想知道:

3)我应该使用哪种与目标设备交互的框架?

从开发人员的角度来看,我也对可用于与连接的蓝牙设备进行交互的API感兴趣。由于我正在创建自己的应用程序并为按钮分配操作,因此在分配给按钮的方法内部,我需要执行向目标设备发送消息。所以我的下一个问题是:

4)有没有人知道如何将命令发送到目标设备(开始/停止/暂停/前进/后退等)作为XCode中提供的某些API的一部分,或者我参加的每条消息通过蓝牙发送到我需要根据协议文档制作的目标设备(自己制作整个消息(标题,正文,命令部分等))?

AVRCP是我完成此应用程序的想法。如果我错了,请告诉我。 蓝牙具有不同的配置文件,并且当从一个设备发送消息时,据我所知,配置文件本身处理消息并将其解释并传送到目标设备,以便目标设备可以理解它。我不明白从我从Objective-C(或C)代码发送消息后,从iPhone发送到目标蓝牙设备的消息是如何处理的。这是我的主要疑问,它与问题4有关 - 我是否需要以正确的格式生成原始消息才能将AVRCP命令发送到设备,或者我可以使用某些API将这些消息识别为AVRCP(或任何其他类型)并将其提供给目标设备

最后一个问题(如果我认为对以前的所有问题都有任何积极的答案)从开发人员的角度来看最让我担忧。所以,如果有人可能遇到过这个具体问题,我会很感激任何答案或建议。

我真的很期待你的回答。我希望这个主题能够开始建设性和有用的讨论,并且会写出许多有用的信息。

最好的问候。

2 个答案:

答案 0 :(得分:5)

如果您的设备(CD播放器)符合蓝牙4.0 LE标准,则可以使用CoreBluetooth执行此操作

答案 1 :(得分:0)

即使你的车载CD播放机有BLE 4.0,你也很可能无法做到这一点。

随着核心蓝牙设备充当“中央”(客户端)或“外围设备”(服务器),外围设备“具有数据”并公开具有特征(变量)的服务。中央(客户端)从外围设备读取数据或订阅通知。

您唯一的机会是连接到CD播放器作为外围设备(服务器),而您的iPhone作为中心(客户端)。在这种情况下,CD播放器必须公开允许您控制它的服务。说实话,我不知道如何做到这一点,因为中央(iPhone)将读取数据并从外围设备接收通知,而不是相反。

转换角色,将iPhone作为外围设备实现是有意义的,但是没有预定义的蓝牙LE服务用于远程控制,因此您的车载CD播放器不知道您期望的服务。它可能使用HID服务(人机接口设备),一般用于键盘和鼠标,但根据这个post,Apple禁止在iOS上使用HID。