Core Bluetooth框架各个类详解

公司最近做项目,用到蓝牙4.0.然后自己就开始学习。


----------------------- CBPeripheralManager-----------------------------------------

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;

peripheral的代理会回调-(void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)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的话本地数据库数据将要清空,所有服务必须重新加入

  *

// 用于还原设备peripheral的状态  (当系统被还原的时候,字典里面保存着状态,可以用字典里面的状态去还原peripheral),用于保存和恢复特性,在应用程序重新启动的时候第一个调用的方法 就是恢复状态

- (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;


//当你发布一个服务和任何一个相关的特征或者特征的描述到GATT数据库的时候(Generic Attribute Profile      )

- (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error;



// 当远端设备 central 订阅一个 characteristic的值 当更新这个值的时候使用CBPeripheralManager的

- (BOOL)updateValue:(NSData *)value forCharacteristic:(CBMutableCharacteristic*)characteristic onSubscribedCentrals:(NSArray *)centrals;方法去更新值,在更新过后CBPeripheralManager的代理会收到回调。(NSArray *)centrals;这些个central都会回调去更新值


- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic;



//当central取消订阅 characteristic这个特征的值后调用方法。使用这个方法提示停止为这个central发送更新

- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didUnsubscribeFromCharacteristic:(CBCharacteristic *)characteristic;



//peripheral再次准备好发送Characteristic值的更新时候调用

//当updateValue: forCharacteristic:onSubscribedCentrals:方法调用因为底层用于传输Characteristic值更新的队列满了而更新失败的时候,实现这个委托再次发送改值

- (void)peripheralManagerIsReadyToUpdateSubscribers:(CBPeripheralManager *)peripheral;



//当一个 peripheral接收一个ATT读请求   characteristic有一个动态的值的时候
//每次调用- (void)respondToRequest:(CBATTRequest *)request withResult:(CBATTError)result;
// 每次都会有回调改代理

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request;



//  (NSArray *)requests是一个或者多个CBATTRequest数组
// 当你访问respondToRequest:withResult 
//If the requests parameter contains multiple requests, treat them as you would a single request—if any individual request cannot be fulfilled, you should not fulfill any of them.

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值