【发布时间】:2015-04-08 11:53:19
【问题描述】:
我正在研究开发一个 iOS 应用程序,该应用程序将使用 iOS Supported Bluetooth Profiles 与蓝牙经典设备进行通信
据我了解,这应该可以使用外部附件框架实现,并且不需要参与 MFi 计划。来自MFi FAQ:
哪些类型的配件和技术不属于 MFi 程序?
不使用所列任何 MFi 许可技术的配件 以上不属于 MFi 计划的一部分。例如:
- 仅使用标准Bluetooth profiles supported by iOS 的附件
到目前为止,一切都很好。 External Accessory Framework doc 简介说(强调):
外部附件框架为通信提供支持 通过外部硬件连接到基于 iOS 的设备 30 针底座连接器或使用蓝牙无线方式。应用程序 支持外接配件一定要配置好自己的 Info.plist 文件正确。具体来说,您必须包括 UISupportedExternalAccessoryProtocols 键来声明具体的 您的应用程序支持的硬件协议。
上面提到的“特定硬件协议”的值在哪里记录?我假设这是指蓝牙配置文件?
FWIW,我已经下载并尝试运行 Apple's EADemo app。它包括 UISupportedExternalAccessoryProtocols 键的值 com.apple.p1 和 com.apple.p2。当我在第 4 代 iPod Touch/iOS8.1.3 上运行 EADemo 应用程序时,它没有找到任何 BT 设备。它应该会找到它所连接的 Jawbone 扬声器。
为了简化,我还创建了一个非常小的示例应用程序来监听 EAAccessoryDidConnectNotification 通知:
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(accessoryDidConnect:) name:EAAccessoryDidConnectNotification object:nil];
[[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications];
}
- (void) accessoryDidConnect:(NSNotification *)notification {
EAAccessory *connectedAccessory = [[notification userInfo] objectForKey:EAAccessoryKey];
NSLog(@"didConnect: %@", connectedAccessory.name);
}
当我在 iPod Touch 上运行代码时,没有收到任何通知。在应用程序运行时。我已关闭 Jawbone 扬声器,然后再打开以启动连接。 (我可以通过查看设置->蓝牙来确认它确实连接)。
我已将 UISupportedExternalAccessoryProtocols 键添加到应用 plist,并将值数组留空并添加了 com.apple.p1 和 com.apple.p2(与 EADemo 应用中一样)。
关于我缺少什么的任何想法?如何让 iOS 应用与经典蓝牙设备进行通信?
【问题讨论】:
标签: ios objective-c iphone bluetooth external-accessory