iOS開發之ExternalAccessory框架的應用

iOS開發之ExternalAccessory框架的應用

      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
相關文章
相關標籤/搜索