CBPeripheralManager

CBPeripheralManager学习笔记

@interface CBPeripheralManager : NSObject

//CBPeripheralManager的几种状态

typedef NS_ENUM(NSInteger, CBCentralManagerState) {

// 初始的时候是未知的(刚刚创建的时候)

CBCentralManagerStateUnknown = 0,

//正在重置状态

CBCentralManagerStateResetting,

//设备不支持的状态

CBCentralManagerStateUnsupported,

// 设备未授权状态

CBCentralManagerStateUnauthorized,

//设备关闭状态

CBCentralManagerStatePoweredOff,

// 设备开启状态 -- 可用状态

CBCentralManagerStatePoweredOn,

};

// 设置代理 一般就是当前类

@property(weak, nonatomic) id<CBPeripheralManagerDelegate>
delegate;

// CBPeripheral类实例当前状态

@property(readonly) CBPeripheralManagerState state;

//当前是否正在广播数据

@property(readonly) BOOL isAdvertising;

//蓝牙设备授权状态

// 授权状态不确定 未知CBPeripheralManagerAuthorizationStatusNotDetermined = 0,

// 授权状态是受限制的

CBPeripheralManagerAuthorizationStatusRestricted,

// 授权状态是拒绝的 (未授权)

CBPeripheralManagerAuthorizationStatusDenied,

// 授权状态是已授权

CBPeripheralManagerAuthorizationStatusAuthorized,

+ (CBPeripheralManagerAuthorizationStatus)authorizationStatus

//创建  如果queue为nil那么就是在主线程中使用

- (id)initWithDelegate:(id<CBPeripheralManagerDelegate>)delegate queue:(dispatch_queue_t)queue;

//相较于第一个创建方法多了一个可选项options

//其中options里面有两个key值

//CBPeripheralManagerOptionRestoreIdentifierKey

----对应的值是一个字典(数组)创建一个CBPeripheralManager的一个实例时从options中取出值去恢复Peripheral的状态

//CBPeripheralManagerOptionShowPowerAlertKey

----对应的值是一个NSNumber类型BOOL值,它标识了在系统peripheral创建在蓝牙关闭的情况下是否应该显示一个警告对话框

- (id)initWithDelegate:(id<CBPeripheralManagerDelegate>)delegate queue:(dispatch_queue_t)queue
options:(NSDictionary *)options

//advertisementData包含了你想要广播的数据,当广播开启的时候 peripheral会调用他的代理方法-(void)peripheralManagerDidStartAdvertising: error:

- (void)startAdvertising:(NSDictionary *)advertisementData;

// 停止广播

- (void)stopAdvertising

// 设置一个延时for central

//CBPeripheralManagerConnectionLatency是一个枚举:

CBPeripheralManagerConnectionLatencyLow 低连接延时,

CBPeripheralManagerConnectionLatencyMedium 中等连接延时,

CBPeripheralManagerConnectionLatencyHigh 高连接延时

- (void)setDesiredConnectionLatency:(CBPeripheralManagerConnectionLatency)latency forCentral:(CBCentral *)central

//添加一个service和与这个service相关联的characteristic到local database,如果他们已经存在他们必须首先被发布

- (void)addService:(CBMutableService *)service;

//冲local database移除一个已经发布的服务,如果这个服务包含了其他服务,那么必须先移除前者

- (void)removeService:(CBMutableService *)service;

//移除所有已经发布的服务service

- (void)removeAllServices;

//响应一个从central传过来读或者写请求

//响应已连接的central的读写请求,当peripheral接收到central的读或者写的 characteristic 的 value时候peripheral会回调peripheralManager:didReceiveReadRequest:或者peripheralManager:didReceiveWriteRequest:

- (void)respondToRequest:(CBATTRequest *)request withResult:(CBATTError)result;

//为订阅了peripheral的central更新characteristic里面的值

- (BOOL)updateValue:(NSData *)value forCharacteristic:(CBMutableCharacteristic *)characteristic onSubscribedCentrals:(NSArray *)centrals

******************************代理方法***********************************

@protocol CBPeripheralManagerDelegate <NSObject>

@required

//更新状态 ,只有状态可用的时候才能够进行创建服务,发布等等操作

//状态和CBCentralManager一样

- (void)peripheralManagerDidUpdateState:(CBPeripheralManager*)peripheral

@optional

//peripheral提供信息,dict包含了应用程序关闭是系统保存的peripheral的信息,用dic去恢复peripheral

//app状态的保存或者恢复,这是第一个被调用的方法当APP进入后台去完成一些蓝牙有关的工作设置,使用这个方法同步app状态通过蓝牙系统

//dic里面有两对key值分别对应服务(数组)和数据(数组)

- (void)peripheralManager:(CBPeripheralManager *)peripheral willRestoreState:(NSDictionary *)dict;

// 开始向外广播数据  当startAdvertising被执行的时候调用这个代理方法

- (void)peripheralManagerDidStartAdvertising:(CBPeripheralManager *)peripheral error:(NSError *)error

// 当你执行addService方法后执行如下回调,当你发布一个服务和任何一个相关特征的描述到GATI数据库的时候执行

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

//central订阅了characteristic的值,当更新值的时候peripheral会调用【updateValue: forCharacteristic: onSubscribedCentrals:(NSArray*)centrals】去为数组里面的centrals更新对应characteristic的值,在更新过后peripheral为每一个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接受到一个读ATT读请求,数据在CBATTRequest

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

//当peripheral接受到一个写请求的时候调用,参数有一个数组的CBATTRequest对象request

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

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

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

- (void)peripheralManagerIsReadyToUpdateSubscribers:(CBPeripheralManager *)peripheral

时间: 2024-11-05 17:29:49

CBPeripheralManager的相关文章

2.OC蓝牙功能

一.  最早的蓝牙框架是GameKit,iOS7之前用的比较多,它有只能支持iOS设备间的传输,但是使用步骤简单,我们只需要搞清楚两个类就可以了. GKPeerPickerController:熟称浏览器,调用此控制器的show方法来显示当前的蓝牙热点,一旦发现有另一页在查找蓝牙的用户,之间就能实链接. GKSession:连接会话,主要用于发送和接受传输数据.档两个程序进行连接时,GKPeerPickerController的代理方法会将两者建立的会话(GKSession)对象传递给制定的对象

iOS 蓝牙开发(三)app作为外设被连接的实现(转)

转载自:www.cocoachina.com/ios/20151105/14071.html 原作者:刘彦玮 再上一节说了app作为central连接peripheral的情况,这一节介绍如何使用app发布一个peripheral,给其他的central连接 还是这张图,central模式用的都是左边的类,而peripheral模式用的是右边的类 peripheral模式的流程 1. 打开peripheralManager,设置peripheralManager的委托 2. 创建characte

调用系统的打电话,发短信,邮件,蓝牙

在开发某些应用时可能希望能够调用iOS系统内置的电话.短信.邮件.浏览器应用,此时你可以直接使用UIApplication的OpenURL:方法指定特定的协议来打开不同的系统应用.常用的协议如下: 打电话:tel:或者tel://.telprompt:或telprompt://(拨打电话前有提示) 发短信:sms:或者sms:// 发送邮件:mailto:或者mailto:// 启动浏览器:http:或者http:// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

iBeacon的第一篇(基于Swift实现)

低功耗蓝牙技术现在几乎是只能手机的标配.随着这一技术的发展,苹果在2013年WWDC大会上,苹果推出iBeacon技术.该技术允许开发人员开发能够使用iBeacon硬件传感器的iOS应用程序,来为相应的应用程序提供更加精准的位置信息.2014年WWDC大会上,苹果表示,对iBeacon技术进行了改善,借助该技术,应用程序现在能够跟踪到用户所在的楼层的精确位置信息. iBeacon的工作方式是Transmitter-Receiver,即基站-接收机模式的.基站?这个时候不要想到移动.联通的那些大铁

Core Bluetooth Programming Guide - Performing Common Peripheral Role Tasks 粗译

Core Bluetooth Programming Guide 粗译 续 code {padding:0.2em 0.4em; background:#e1e9ed;} pre {text-align:left; overflow-x: scroll; color: #d3bd7e; background: #202020; padding: 10pt 15pt; border-radius: 3px;} hr {border: 0px; border-top: 1px solid #ddd;

iOS 蓝牙4.0学习

周边( Peripheral) 是?成或者保存了数据的设备, 中央( Central) 是使用这些数据的设备. 所有可用的iOS设备可以作为周边(Per ipheral) 也可以作为中央(Central) , 但不可以同时既是周边也是中央. 周边设备: 作为服务端, 向外界提供服务,发送数据给中央设备.中央设备: 作为客户端, 扫描周边设备, 然后连接, 找到周边设备提供的合适的服务和特征, 接收数据. 一 周边设备(Peripheral,服务端) 需要遵循代理方法 <CBPeripheralM

(转)iOS蓝牙调用的一般流程

文章转自:http://www.cnblogs.com/ctaodream/archive/2013/07/03/3169962.html 一.服务端(也叫周边设备吧..脑残的翻译) 1.实现类必须遵守协议 CBPeripheralManagerDelegate 2.需要的主要类有: @property(strong,nonatomic) CBPeripheralManager *peripheraManager; @property(strong,nonatomic) CBMutableCha

iOS开发之--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook功能开发汇总

前言 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: 目录 系统应用 系统服务 2.1. 短信与邮件 2.2. 通讯录 2.3. 蓝牙 2.4. 社交 2.5. Game Center 2.6. 应用内购买 2.7. iCloud 2.8. Passbook 1. 系统应用 在开发某些应用时可能希望能够调用iOS系统内置的电话.短信.邮件.浏览

Core BlueTooth官方文档翻译

本?文是苹果<Core Bluetooth Programming Guide>的翻译. 关于Core Bluetooth Core Bluetooth 框架提供了蓝?牙低功耗?无线设备与 iOS 应?用或 Mac 应?用通讯的必要的类.应?用可以发现,探索低功耗外设,并与它交互,?比如?心率监控器和数字 温度调节器. 从 OS X V10.9 和 iOS 6 之后,Mac 和 iOS 设备也能充当蓝?牙低功耗外设给包括 Mac 和 iOS 在内的其他设备提供数据服务了. 概览 蓝?牙低功耗?