9

私はプロジェクトの外部アクセサリとMFIを扱っていますが、次の質問があります。

iOSデバイスをMFIハードウェアに接続した後、認識できるサードパーティのハードウェア属性は何ですか?具体的には、Androidでできるように、特定のメーカーやデバイス名を確認するのではなく、デバイスのクラスや機能を判断するための一般的な方法を探しています(以下を参照)。これは可能ですか?

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

最終目標:オーディオドックに接続されているときにブール値を切り替えます。他のイベントを無視します。iOSがどれだけきめ細かくできるかわかりません。iOSは、オーディオドックゴルフパターアプリクレードルの違いを認識できます か?MFiは、デバイスの機能に関する洞察を提供しますか?

iOS4.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アプリのファイルのセクション(タイプ:文字列の配列)にこのようなプロトコル名を1つ以上指定Info.plistすると、適切なデバイスが接続されていればアプリが起動します。

于 2012-08-23T07:18:35.313 に答える