iOS设备连接到MFI硬件时可以检测或获取哪些硬件属性?

Boo*_*oon 8 external-accessory ios mfi

我正在处理项目的外部配件和MFI,并有这个问题:

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

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

最终目标:连接到音频基座时切换布尔值; 忽略其他事件.我不确定iOS可以获得多么精细.iOS可以说出音频底座Golf Putter App Cradle之间的区别 吗?MFi是否可以深入了解设备的功能?

我将针对iOS 4.2+.

Mat*_*ias 5

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

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

添加硬件后,您会收到一个通知EAAccessoryKey,其中可以用来EAAccessory从附件管理器获取

- (void)_accessoryDidConnect:(NSNotification *)notification {
      EAAccessory *accessory = [[notification userInfo] objectForKey:EAAccessoryKey];
Run Code Online (Sandbox Code Playgroud)

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

NSString* name  
NSString* manufacturer  
NSString* modelNumber  
NSString* serialNumber  
NSString* firmwareRevision  
NSString* hardwareRevision  
NSArray* protocolStrings
Run Code Online (Sandbox Code Playgroud)

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

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

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