我正在为一个项目处理外部附件和MFI,并提出这个问题:
将iOS设备连接到MFI硬件后,可以识别哪些第三方硬件属性(如果有)?具体来说,我正在寻找一种通用的方法来确定设备类或功能,而不是必须检查特定的制造商和设备名称,类似于Android可以做到的方式(见下文)。这可能吗?
http://developer.android.com/reference/android/bluetooth/BluetoothClass.Device.html
最终目标:连接到音频基座时切换布尔值;忽略其他事件。我不确定iOS可以获得多么精细。 iOS可以说出audio dock和Golf Putter App Cradle之间的区别吗? MFi是否可以深入了解设备的功能?
我将定位iOS 4.2 +。
答案 0 :(得分: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
部分(类型:字符串数组)中提供了一个或多个此类协议名称,则如果连接了正确的设备,您的应用将会启动。