ExternalAccessory框架用來對外設進行管理,iOS外設一般是經過MFI認證的外部設備,能夠經過藍牙進行鏈接,也能夠使用lighting端口進行鏈接。框架
EAAccessoryManager類用來對外設進行管理,其中屬性方法以下:編碼
@interface EAAccessoryManager : NSObject // 獲取單例對象 + (EAAccessoryManager *)sharedAccessoryManager; // 打開藍牙外設搜索列表 - (void)showBluetoothAccessoryPickerWithNameFilter:(nullable NSPredicate *)predicate completion:(nullable EABluetoothAccessoryPickerCompletion)completion; // 註冊本地通知 當外設鏈接狀態變化後會觸發通知 - (void)registerForLocalNotifications; // 取消通知的註冊 - (void)unregisterForLocalNotifications; // 全部鏈接的外設列表 @property (nonatomic, readonly) NSArray<EAAccessory *> *connectedAccessories; @end
若是註冊了本地通知,則能夠監聽下面兩個通知:atom
EAAccessoryDidConnectNotification // 外設已經鏈接的通知 EAAccessoryDidDisconnectNotification // 外設斷開鏈接的通知
EAAccessory是外設對象,其中定義了外設的相關信息,以下:spa
@interface EAAccessory : NSObject // 是否已經鏈接 @property(nonatomic, readonly, getter=isConnected) BOOL connected; // 鏈接ID @property(nonatomic, readonly) NSUInteger connectionID; // 製造商 @property(nonatomic, readonly) NSString *manufacturer; // 外設名稱 @property(nonatomic, readonly) NSString *name; // 模式編碼 @property(nonatomic, readonly) NSString *modelNumber; // 序列號 @property(nonatomic, readonly) NSString *serialNumber; // 固件版本 @property(nonatomic, readonly) NSString *firmwareRevision; // 硬件版本 @property(nonatomic, readonly) NSString *hardwareRevision; // 接口類型 @property(nonatomic, readonly) NSString *dockType; // 協議列表 @property(nonatomic, readonly) NSArray<NSString *> *protocolStrings; // 代理 @property(nonatomic, assign, nullable) id<EAAccessoryDelegate> delegate; @end @protocol EAAccessoryDelegate <NSObject> @optional // 外設斷開鏈接時調用 - (void)accessoryDidDisconnect:(EAAccessory *)accessory; @end
須要注意,與外設進行通信須要指定對應的協議,首先,須要在iOS應用的info.plist文件中添加以下鍵來指定此應用要交互的外設協議:代理
具體的外設協議須要查看外設的說明文檔。code
EASession類用來進行外設交互,解析以下:對象
@interface EASession : NSObject // 指定外設和協議來建立會話對象 - (nullable instancetype)initWithAccessory:(EAAccessory *)accessory forProtocol:(NSString *)protocolString; // 外設對象 @property (nonatomic, readonly, nullable) EAAccessory *accessory; // 協議 @property (nonatomic, readonly, nullable) NSString *protocolString; // 輸入流 用來向外設發送數據 @property (nonatomic, readonly, nullable) NSInputStream *inputStream; // 輸出流 用來接收外設發送的數據 @property (nonatomic, readonly, nullable) NSOutputStream *outputStream; @end
EAWiFiUnconfiguredAccessoryBrowser類用來瀏覽未配置的WIFI外設:blog
@interface EAWiFiUnconfiguredAccessoryBrowser : NSObject // 初始化方法 - (instancetype)initWithDelegate:(nullable id<EAWiFiUnconfiguredAccessoryBrowserDelegate>)delegate queue:(nullable dispatch_queue_t)queue; // 代理 @property (weak, nonatomic, nullable) id<EAWiFiUnconfiguredAccessoryBrowserDelegate> delegate; // 未配置的外設 @property (readonly, copy, atomic) NSSet<EAWiFiUnconfiguredAccessory *> *unconfiguredAccessories; // 開始進行搜索 - (void)startSearchingForUnconfiguredAccessoriesMatchingPredicate:(nullable NSPredicate *)predicate; // 結束搜索 - (void)stopSearchingForUnconfiguredAccessories; // 對外設進行配置 - (void)configureAccessory:(EAWiFiUnconfiguredAccessory *)accessory withConfigurationUIOnViewController:(UIViewController *)viewController; @end @protocol EAWiFiUnconfiguredAccessoryBrowserDelegate <NSObject> // 搜索狀態改變後調用的回調 /* typedef NS_ENUM(NSInteger, EAWiFiUnconfiguredAccessoryBrowserState) { EAWiFiUnconfiguredAccessoryBrowserStateWiFiUnavailable = 0, // WIFI不可用 EAWiFiUnconfiguredAccessoryBrowserStateStopped, // 中止 EAWiFiUnconfiguredAccessoryBrowserStateSearching, // 搜索中 EAWiFiUnconfiguredAccessoryBrowserStateConfiguring, // 配置中 }; */ - (void)accessoryBrowser:(EAWiFiUnconfiguredAccessoryBrowser *)browser didUpdateState:(EAWiFiUnconfiguredAccessoryBrowserState)state; // 發現了未配置的外設 - (void)accessoryBrowser:(EAWiFiUnconfiguredAccessoryBrowser *)browser didFindUnconfiguredAccessories:(NSSet<EAWiFiUnconfiguredAccessory *> *)accessories; // 移除了未配置的外設 - (void)accessoryBrowser:(EAWiFiUnconfiguredAccessoryBrowser *)browser didRemoveUnconfiguredAccessories:(NSSet<EAWiFiUnconfiguredAccessory *> *)accessories; // 完成配置 - (void)accessoryBrowser:(EAWiFiUnconfiguredAccessoryBrowser *)browser didFinishConfiguringAccessory:(EAWiFiUnconfiguredAccessory *)accessory withStatus:(EAWiFiUnconfiguredAccessoryConfigurationStatus)status; @end
EAWiFiUnconfiguredAccessory對象描述WIFI外設,以下:接口
@interface EAWiFiUnconfiguredAccessory : NSObject // 名稱 @property(copy, nonatomic, readonly) NSString *name; // 設備商 @property(copy, nonatomic, readonly) NSString *manufacturer; // 模式 @property(copy, nonatomic, readonly) NSString *model; // WIFI的SSID @property(copy, nonatomic, readonly) NSString *ssid; // 硬件地址 @property(copy, nonatomic, readonly) NSString *macAddress; //屬性 /* typedef NS_OPTIONS(NSUInteger, EAWiFiUnconfiguredAccessoryProperties) { EAWiFiUnconfiguredAccessoryPropertySupportsAirPlay = (1 << 0), EAWiFiUnconfiguredAccessoryPropertySupportsAirPrint = (1 << 1), EAWiFiUnconfiguredAccessoryPropertySupportsHomeKit = (1 << 2) }; */ @property(readonly, nonatomic, readonly) EAWiFiUnconfiguredAccessoryProperties properties; @end