9

我正在为一个项目处理外部附件和 MFI 并且有这个问题:

将 iOS 设备连接到 MFI 硬件后,可以识别哪些 3rd 方硬件属性(如果有)?具体来说,我正在寻找一种通用的方法来确定设备类或功能,而不必检查特定的制造商和设备名称,类似于 Android 可以做到的方式(见下文)。这可能吗?

http://developer.android.com/reference/android/bluetooth/BluetoothClass.Device.html

最终目标:连接到音频基座时切换布尔值;忽略其他事件。我不确定 iOS 的粒度有多细。iOS 可以区分 音频底座Golf Putter App Cradle吗?MFi 是否允许深入了解设备的功能?

我的目标是 iOS 4.2+。

4

1 回答 1

5

您可以请求按EAAccessoryManager类(通过registerForLocalNotifications方法)获取通知。为此,您需要将其添加ExternalAccessory.framework到您的项目中。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_accessoryDidDisconnect:) name:EAAccessoryDidDisconnectNotification object:nil];
[[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications];

添加硬件后,您会收到一条通知EAAccessoryKey,然后可以使用该通知EAAccessory从附件管理器中获取

- (void)_accessoryDidConnect:(NSNotification *)notification {
      EAAccessory *accessory = [[notification userInfo] objectForKey:EAAccessoryKey];

该附件具有许多属性,有助于识别已连接的硬件类型:

NSString* name  
NSString* manufacturer  
NSString* modelNumber  
NSString* serialNumber  
NSString* firmwareRevision  
NSString* hardwareRevision  
NSArray* protocolStrings

我不知道您的音频坞站在这里提供了什么,但应该很容易尝试并希望它对所有设备都是一致的 :-)

如果您对特定设备不感兴趣,但对一类设备(具有特定行为)感兴趣,protocolStrings应该会有用。该数组由命名协议的字符串组成(在行为意义上,而不是在 ObjectiveC 意义上)。名称被格式化为反向 DNS 字符串 (com.mycompany.myprotocol)。

如果您在UISupportedExternalAccessoryProtocols应用文件的部分(类型:字符串数组)中提供一个或多个此类协议名称,Info.plist则如果连接了正确的设备,您的应用将启动。

于 2012-08-23T07:18:35.313 回答