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

9

我正在处理一个与外部配件和MFI有关的项目,并且有以下问题:

在将iOS设备连接到MFI硬件后,是否可以识别第三方硬件属性?具体来说,我在寻找一种通用方法来确定设备类或功能,而不是必须检查特定制造商和设备名称,就像Android可以做到的那样(请参见下面的链接)。这是否可能?

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

最终目标:在连接到音频底座时切换布尔值;忽略其他事件。我不确定iOS可以有多精细。iOS能区分音频底座高尔夫推杆应用支架吗?MFi是否提供了设备功能的洞察力?

我将针对iOS 4.2+进行操作。

1个回答

6
您可以通过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)。

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


谢谢 - 我知道这个信息,但我想要一个更通用的方法来获取设备类别,因为像你所说的检查特定信息非常繁琐和不切实际。我正在寻找类似于Android在这里所做的事情:http://developer.android.com/reference/android/bluetooth/BluetoothClass.Device.html - Boon
由于没有更多的答案,而且Matthias足够关心并发布了详细的解决方案,因此向他提供奖金。 - Boon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接