最近要做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就先了解到這里。
@import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);