天天看點

了解External Accessory Framework之EAAccessory

最近要做MFI配件的app,找了一下需要External Accessory Framework架構,但是相關的文章貌似不多,是以記錄下自己的所學到的一些内容與大家分享。   那麼什麼是External Accessory Framework?   這裡引用了Apple Developer内的原文:

  The External Accessory framework (

ExternalAccessory.framework

) provides a conduit for communicating with accessories attached to any iOS-based device. App developers can use this conduit to integrate accessory-level features into their apps.     意思簡單了解就是:     External Accessory Framework提供了配件連接配接iOS裝置的通道。開發者可以通過它來開發連接配接配件的app。

     配件可以通過30pin、藍牙、USB的方式連接配接iOS裝置。     下面就開始簡單了解下External Accessory Framework都有些什麼吧:

  1. 它包含三個類:      EAAccessory           代表了一個單例的硬體配件對象。      EAAccessoryManager           管理所有連接配接到iPhone的配件。      EASession           定義了iPhone app與外部配件的連接配接和通道。   2. EAAccessory類      EAAccessory類的屬性:           1) Boolean connected read-only     配件是否連接配接iPhone的标志              

@property (nonatomic, readonly, getter = isConnected) BOOL connected      

            2) NSUInteger connectionID read-only     連接配接裝置的配件唯一辨別              

@property (nonatomic, readonly) NSUInteger connectionID      

               EAAccessory Framework提供了可用配件的清單,是以要用NSArray來處理:               

1 for (EAAccessory *accessory in _accessoryList) {
2     if ([disconnectedAccessory connectionID] == [accessory connectionID]) {
3         break;
4     }
5     disconnectedAccessoryIndex++;
6 }          

            3) id<EAAcessoryDelegate> delegate 定義了接收配件狀态變化的notifications的對象                定義一個accController類              

1 @interface accController : NSObject<EAAccessoryDelegate> {
2     EAAccessory *_accessory;
3     EASession *_session;
4     NSString *_protocolString;
5 }
6  (void)accessoryDidDisconnect : (EAAccessory *)accessory;
7 @end      

            4) NSString firmwareRevision read-only     固件版本資訊,注意相容性              

@property (nonatomic, readonly) NSString *firmwareRevision      

                    5) NNString hardwareRevision read-only     硬體版本資訊,同上              

@property (nonatomic, readonly) NSString *hardwareRevison      

            6) NSString manufacturer read-only     配件所屬公司              

@property (nonatomic, readonly) NSString *manufacturer      

               7) NSString modelNumber read-only     配件裝置号              

@property (nonatomic, readonly) NSString *modelNumber      

            8) NSString name read-only     配件名稱,回報給使用者連接配接了正确的配件              

@property (nonatomic, readonly) NSString *name      

            9) NSArray protocolStrings read-only     protocols的名稱,注意,跟connectionID對應,是以是一個NSArray的對象             

@property (nonatomic, readonly) NSArray *protocolStrings      

               代碼示例:             

1  - (void)setupAccessoryController : (EAAccessory *)accessory withProtocolString : (NSString *)protocolString {
2     [_accessory release];     // 防止斷開連接配接後重連不同配件
3     _accessory = [accessory retain];
4     [_protocolString release];
5     _protocolString = [protocolString copy];
6 }      

               這段代碼可以用在配件連接配接裝置後來建立一個accessory controller對象。                調用個的方法:              

1 [accessoryController setupAccessoryController : _selectedAccessory withProtocolString : [[_selectedAccessory protocolStrings] objectAtIndex : 0]]; // 隻能連接配接一個裝置      

                    10) NSString serialNumber read-only     連接配接的配件序列号,每個配件唯一              

@property (nonatomic, readonly) NSString *serialNumber      

       EAAccessory類中的常量:           EAConnectionIDNone     實質為0,無效的連接配接,通過與connectionID的比較,可以嘗試重連配件或者提示使用者斷開配件重新連接配接裝置。   這第一個類EAAccessory就先了解到這裡。