公司最近做项目,用到蓝牙4.0.然后自己就开始学习。
CBPeripheralManager:表示周边,一个可以提供数据和服务的类
// 继承自NSObject
@interface CBPeripheralManager : NSObject
// 代理
@property(weak, nonatomic) id<CBPeripheralManagerDelegate> delegate;
// 这个Peripheral设备的当前状态,最初创建的时候是CBPeripheralManagerStateUnknown,并且通过他的代理执行代理方法去更新这个状态-(void)peripheralManagerDidUpdateState:()
@property(readonly) CBPeripheralManagerState state;
//未知状态
CBPeripheralManagerStateUnknown = 0,
//重置状态
CBPeripheralManagerStateResetting,
//不支持状态
CBPeripheralManagerStateUnsupported,
//为授权状态
CBPeripheralManagerStateUnauthorized,
//关闭状态
CBPeripheralManagerStatePoweredOff,
//打开状态
CBPeripheralManagerStatePoweredOn,
// Peripheral是否正在广播数据
@property(readonly) BOOL isAdvertising;
// 用于返回设备的授权状态:只是应用程序是否被授权使用蓝牙服务,共享数据
+ (CBPeripheralManagerAuthorizationStatus)authorizationStatus;
CBPeripheralManagerAuthorizationStatus是枚举
// 授权状态不确定 未知
CBPeripheralManagerAuthorizationStatusNotDetermined = 0,
// 授权状态是受限制的
CBPeripheralManagerAuthorizationStatusRestricted,
// 授权状态是拒绝的 (未授权)
CBPeripheralManagerAuthorizationStatusDenied,
// 授权状态是已授权
CBPeripheralManagerAuthorizationStatusAuthorized,
// 实例化方法 第一个参数是这个peripheral的代理 和一个队列如果运行在主线程中那么它就是nil 或者在你自己创建的队列中
- (id)initWithDelegate:(id<CBPeripheralManagerDelegate>)delegate queue:(dispatch_queue_t)queue;
// 多了一个可选的设备
- (id)initWithDelegate:(id<CBPeripheralManagerDelegate>)delegate queue:(dispatch_queue_t)queue options:(NSDictionary *)options
options:
NSString *const CBPeripheralManagerOptionShowPowerAlertKey;
一个bool值 指定系统在peripheral创建,蓝牙被关闭的情况下是否应该显示一个警告对话框
该键的值是一个NSNumber
默认为NO
NSString *const CBPeripheralManagerOptionRestoreIdentifierKey;
创建peripheral的时候从一个options中的状态去恢复,结合- (void)peripheralManager:(CBPeripheralManager *)peripheral willRestoreState:(NSDictionary *)dict去理解
// 添加服务
- (void)addService:(CBMutableService *)service;
error:(NSError *)error
//开始广播
- (void)startAdvertising:(NSDictionary *)advertisementData;
advertisementData是一个可选的字典包含了你想广播的数据,当开始启用广播的时候, peripheral会调用他的代理方法-(void)peripheralManagerDidStartAdvertising: (CBPeripheralManager *)peripheral error:(NSError *)error-----
//停止广播
- (void)stopAdvertising;
//移除服务
- (void)removeService:(CBMutableService *)service;
- (void)removeAllServices;
//设置一个连接延时for central
- (void)setDesiredConnectionLatency:(CBPeripheralManagerConnectionLatency)latency forCentral:(CBCentral *)central;
CBPeripheralManagerConnectionLatency是一个枚举:
CBPeripheralManagerConnectionLatencyLow 低连接延时,
CBPeripheralManagerConnectionLatencyMedium 中等连接延时,
CBPeripheralManagerConnectionLatencyHigh 高连接延时
// 响应读或者写的请求
- (void)respondToRequest:(CBATTRequest *)request withResult:(CBATTError)result;
响应已连接的central的读写请求,当peripheral 接受到central的读或者写characteristic's value时候,它的代理回调peripheralManager:didReceiveReadRequest: 或者
peripheralManager:didReceiveWriteRequests:
// 为已经连接或者说是订阅了的cantral更新数据NSData 通过通知或者指示
- (BOOL)updateValue:(NSData *)value forCharacteristic:(CBMutableCharacteristic *)characteristic onSubscribedCentrals:(NSArray *)centrals;
value是指需要更新的值 characteristic是指需要更新的那个特征 centrals需要更新的central数组 如果为nil那么所有订阅了该服务的central
----------------------------------CBPeripheralManagerDelegate------------------------
//检测peripheral的状态
//在peripheral的状态被更新是调用
- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral;
/** 如果peripheral.state不是powerOn的话表明广告停止或者任何central连接中断
如果peripheral.state是powerOff的话本地数据库数据将要清空,所有服务必须重新加入
- (void)peripheralManager:(CBPeripheralManager *)peripheral willRestoreState:(NSDictionary *)dict;
/**
- dict是字典peripheral状态恢复选项
- key值有:NSString *const CBPeripheralManagerRestoredStateServicesKey;--服务,这个key值对应的值是一个数组,里面包含了CBMutableService 对象
-
NSString *const CBPeripheralManagerRestoredStateAdvertisementDataKey;--数据
-
**/
// 开始向外广播数据的时候调用
- (void)peripheralManagerDidStartAdvertising:(CBPeripheralManager *)peripheral error:(NSError *)error;
- (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error;
- (BOOL)updateValue:(NSData *)value forCharacteristic:(CBMutableCharacteristic*)characteristic onSubscribedCentrals:(NSArray *)centrals;方法去更新值,在更新过后CBPeripheralManager的代理会收到回调。(NSArray *)centrals;这些个central都会回调去更新值
- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic;
- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didUnsubscribeFromCharacteristic:(CBCharacteristic *)characteristic;
//peripheral再次准备好发送Characteristic值的更新时候调用
//当updateValue: forCharacteristic:onSubscribedCentrals:方法调用因为底层用于传输Characteristic值更新的队列满了而更新失败的时候,实现这个委托再次发送改值
- (void)peripheralManagerIsReadyToUpdateSubscribers:(CBPeripheralManager *)peripheral;
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request;
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests;