CBCentralManager对象用于管理客户端扫描设备、连接设备和数据传输
相关属性
state : 获取当前CentralManager状态
CBManagerStateUnknown = 0,//未知 CBManagerStateResetting,//复位 CBManagerStateUnsupported,//该设备不支持蓝牙低功耗 CBManagerStateUnauthorized,//该程序无权使用蓝牙低功耗 CBManagerStatePoweredOff,//蓝牙关闭 CBManagerStatePoweredOn,//蓝牙打开
- isScanning:中心设备是否正在扫描
初始化
- (instancetype)initWithDelegate:(nullable id<CBCentralManagerDelegate>)delegate queue:(nullable dispatch_queue_t)queue;
- (instancetype)initWithDelegate:(nullable id<CBCentralManagerDelegate>)delegate queue:(nullable dispatch_queue_t)queue options:(nullable NSDictionary<NSString *, id> *)options;
- delegate:设置代理
- queue:指明在哪个队列处理事件,为nil时表示在主线程处理
- options:这个字典有俩个官方的key
CBCentralManagerOptionShowPowerAlertKey:提示蓝牙开关未打开时会弹出警告框
CBCentralManagerOptionRestoreIdentifierKey:系统使用此UID来识别特定的CentralManager。 因此,为了继续执行应用程序,UID必须保持不变,以便CentralManager成功恢复。
扫描和停扫
- (void)scanForPeripheralsWithServices:(NSArray<CBUUID *> *)serviceUUIDs options:(NSDictionary<NSString *,id> *)options;
- serviceUUIDs:为nil时,会扫描正在广播的所有Peripheral。如果你指定某个Service或者一组Service,只能扫描提供这些Service的Peripheral。(Service里面放的是CBUUID)
- options:这个字典有俩个官方的key
CBCentralManagerScanOptionAllowDuplicatesKey:为NO,表示不会重复扫描已经发现的设备。为YES,扫描中会出现已经扫到的设备。默认为NO
CBCentralManagerScanOptionSolicitedServiceUUIDsKey:以一个数组的形式存在,指定这个选项后central便会找指定的服务的CBUUID
- (void)stopScan;
连接和取消连接
连接设备
- (void)connectPeripheral:(CBPeripheral *)peripheral options:(NSDictionary<NSString *,id> *)options;
- peripheral:将要连接的peripheral,需要保持一下peripheral
- options:这个字典有俩个官方的key
这些key值和蓝牙后台有关,没有多做研究
CBConnectPeripheralOptionNotifyOnConnectionKey
CBConnectPeripheralOptionNotifyOnDisconnectionKey
CBConnectPeripheralOptionNotifyOnNotificationKey
取消某个设备的连接Peripheral
- (void)cancelPeripheralConnection:(CBPeripheral *)peripheral;
获取Peripherals
通过Peripheral的serviceUUID获取当前已经连接的Peripheral
- (NSArray<CBPeripheral *> *)retrieveConnectedPeripheralsWithServices:(NSArray<CBUUID *> *)serviceUUIDs;
通过Peripheral的Identifiers获取对应的Peripheral
- (NSArray<CBPeripheral *> *)retrievePeripheralsWithIdentifiers:(NSArray<NSUUID *> *)identifiers;
关于CBCentralManager代理方法
监听Peripheral连接状态
连接成功会被调用
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral;
断开连接会被调用
- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error;
连接失败会被调用
- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error;
获取Peripheral的状态
当centralManager扫描到peripheral会被调用
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI;
- (void)centralManager:(CBCentralManager *)central didRetrieveConnectedPeripherals:(NSArray<CBPeripheral *> *)peripherals;
- (void)centralManager:(CBCentralManager *)central didRetrievePeripherals:(NSArray<CBPeripheral *> *)peripherals;
监听CentralManager的状态
当CentralManager状态变化的时候会被调用
- (void)centralManagerDidUpdateState:(CBCentralManager *)central;
- (void)centralManager:(CBCentralManager *)central willRestoreState:(NSDictionary<NSString *,id> *)dict;