最近要做MFI配件的app,找了一下需要External Accessory Framework框架,但是相關(guān)的文章貌似不多,所以記錄下自己的所學(xué)到的一些內(nèi)容與大家分享。
  那么什么是External Accessory Framework?
  這里引用了Apple Developer內(nèi)的原文:
 
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.
 
  意思簡(jiǎn)單理解就是:
    External Accessory Framework提供了配件連接iOS設(shè)備的通道。開發(fā)者可以通過它來開發(fā)連接配件的app。
  
  配件可以通過30pin、藍(lán)牙、USB的方式連接iOS設(shè)備。
 
  下面就開始簡(jiǎn)單了解下External Accessory Framework都有些什么吧:
 
1. 它包含三個(gè)類:
     EAAccessory
          代表了一個(gè)單例的硬件配件對(duì)象。
     EAAccessoryManager
          管理所有連接到iPhone的配件。
     EASession
          定義了iPhone app與外部配件的連接和通道。
 
2. EAAccessory類
     EAAccessory類的屬性:
          1) Boolean connected read-only     配件是否連接iPhone的標(biāo)志              
@property (nonatomic, readonly, getter = isConnected) BOOL connected
 
          2) NSUInteger connectionID read-only     連接設(shè)備的配件唯一標(biāo)識(shí)              
@property (nonatomic, readonly) NSUInteger connectionID
               EAAccessory Framework提供了可用配件的列表,所以要用NSArray來處理:
              
復(fù)制代碼
1 for (EAAccessory *accessory in _accessoryList) {
2     if ([disconnectedAccessory connectionID] == [accessory connectionID]) {
3         break;
4     }
5     disconnectedAccessoryIndex++;
6 }    
復(fù)制代碼
 
          3) id<EAAcessoryDelegate> delegate 定義了接收配件狀態(tài)變化的notifications的對(duì)象
               定義一個(gè)accController類              
復(fù)制代碼
1 @interface accController : NSObject<EAAccessoryDelegate> {
2     EAAccessory *_accessory;
3     EASession *_session;
4     NSString *_protocolString;
5 }
6  (void)accessoryDidDisconnect : (EAAccessory *)accessory;
7 @end
復(fù)制代碼
 
          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     配件設(shè)備號(hào)              
@property (nonatomic, readonly) NSString *modelNumber
 
          8) NSString name read-only     配件名稱,反饋給用戶連接了正確的配件              
@property (nonatomic, readonly) NSString *name
 
          9) NSArray protocolStrings read-only     protocols的名稱,注意,跟connectionID對(duì)應(yīng),所以是一個(gè)NSArray的對(duì)象             
@property (nonatomic, readonly) NSArray *protocolStrings
               代碼示例:             
復(fù)制代碼
1  - (void)setupAccessoryController : (EAAccessory *)accessory withProtocolString : (NSString *)protocolString {
2     [_accessory release];     // 防止斷開連接后重連不同配件
3     _accessory = [accessory retain];
4     [_protocolString release];
5     _protocolString = [protocolString copy];
6 }
復(fù)制代碼
               這段代碼可以用在配件連接設(shè)備后來創(chuàng)建一個(gè)accessory controller對(duì)象。
               調(diào)用個(gè)的方法:              
1 [accessoryController setupAccessoryController : _selectedAccessory withProtocolString : [[_selectedAccessory protocolStrings] objectAtIndex : 0]]; // 只能連接一個(gè)設(shè)備
         
          10) NSString serialNumber read-only     連接的配件序列號(hào),每個(gè)配件唯一              
@property (nonatomic, readonly) NSString *serialNumber
 
     EAAccessory類中的常量:
          EAConnectionIDNone     實(shí)質(zhì)為0,無效的連接,通過與connectionID的比較,可以嘗試重連配件或者提示用戶斷開配件重新連接設(shè)備。
 
這第一個(gè)類EAAccessory就先了解到這里。
@import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);