IOS BLE_peripheralManager 类参考

概述

CBPeripheralManager类是被用来发布本地外设属于GATT数据库中的一些服务以及向主设备广播这些服务。当一个服务在数据库中时,它是可见的而且能够被连接的主设备存取。即便如此,假如你的APP没有指定bluetooth-peripheral后台模式,当APP处于后台或者被挂起时,这些服务也是不能够起作用的。哪怕任意一个远端的central试图想访问你的App的任意一个characteristic都是错误的。

当你调用CBPeripherailManager的一些方法时,peripheral必须打开蓝牙例如CBPeripheralManagerStatePoweredOn,这个状态表明peripheral设备(你的iphone、ipad,其他外设)支持BLE而且蓝牙处于打开状态切此时可以被使用。

   具体操作

     初始化peripheral管理器有两种方法:

-initWithDelegate:queue:初始化peripheral管理器并指定代理以及派遣的队列(一般默认为主队列,及queue参数设置为nil)。

-initWithDelegate:queue:options:在上面的基础上多出了一个初始化选项。

注:delegate:指定接受peripheral事件的对象。

     检查peripheral管理器的状态:

state参数:当前peripheral的状态。

+authorizationStatus:当app进入后台时返回APP的许可的状态(这个方法目前还不知道具体怎么用)。apps必须指定蓝牙服务在后台时自动的处理数据,之后当app想在后台使用蓝牙服务是系统会自动展示一个请求给用户。有这个方法时不会限制用户的使用权限,相反是用这个方法能够提示是否隐藏一些UI的功能。

     增加和移除service:

-addService:发布一个服务以及与该服务相关的特性以及特性描述到GATT数据库。当在增加一个服务给GATT数据库是,peripheral会自动调用代理方法peripheralManager:didAddService:error:,如果是一系列的services,你必须首先发布它们。

-removeAllService:  从GATT数据库中移除所有的service。这个方法只能移除用addServices方法增加的service,而有些Service已经发布到一些其他的Apps时,这些Service是不能移除的。

-removeService:移除用addService发放增加的service。

     管理广播数据:

-startAdvertising:peripheral开始对外广播数据。

-stopAdvertising:peripheral停止对外广播数据。

isAdvertising参数:一个BOOL型变量表明当前的peripheral是否正在对外广播数据。

     发送更新的特性值:

-updateValue:forCharacteristic:onSubscribedCentrals:通过通知或者指示(没搞懂)的形式发送更新的特性值。(这个方法很重要的,一般要使用以通知的形式来发送数据的话都是使用这个方法的)。这个方法是带有返回值的,如果这个方法的返回值为NO,表明蓝牙地层队列是满的,这时peripheral会调用peripheralManagerIsReadyIsReadyToUpdateSubsribers:代理方法,使更多的空间用于传输队列,当调用这个方法之后,便可以重新调用这个Update了。当然如果发送的数据的长度大于指定的central最大长度时,如果不做处理的话,会自动删除多余的数据。注:每次发送的数据的最大长度不能大于20个字节。

注:发送批量数据时需要使用-updateValue:forCharacteristic:onSubscribedCentrals:和peripheralManagerIsReadyToUpdateSubscribers回调循环发送,

方法:

第一步先发送-updateValue:forCharacteristic:onSubscribedCentrals:然后等待返回,

若为YES则在此发送数据,知道发送数据返回NO时,

系统会回调peripheralManagerIsReadyToUpdateSubscribers方法,

然后再次调用-updateValue:forCharacteristic:onSubscribedCentrals:

发送数据,依次轮训知道数据发送完成。


此方法说明peripheral和central已经建立起来连接。此时变可以停止广播数据了。

//peripheral设备断开连接是调用此方法,表示与central设备结束了subscribe,此时最好是马上开始广播数据。

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

     回应读或者写的请求:

-respondToRequest:withResult:当连接的central向peripheral读或者写数据时,有这个方法告诉central是否读或者写成功。

     设置连接延迟:

-setDesiredConnectedLatency:forCentral:设置与已经存在的central的连接延迟。

这个延迟事件控制着peripheral与central交换数据的频率,可以管理与数据交换的频率和所述外围设备的所得到的电池性能之间的关系。当你调用这个方法设置连接延迟时,注意链接延迟不是很可靠的,所以得到的延迟时间还是会变化的。如果不显示的设置延迟时间,那么链接延迟会默认为第一次建立链接时的延迟时间,而这时就没有必要在改变延迟时间了。

-(void)startAdvertising:(NSdictionary*)advertisementData:当peripheral开始广播数据时,系统会回调peripheralManagerDidStartising:error:这个代理方法。

peripheral会以最大的可能来广播数据的,由于空间的限制,可能会有多个APP广播相同的数据,当你的APP处于前台时,APp能够用28个byte来存储广播键值支持的数据,如果开辟的这个空间用完时,系统还会在分配10byte的空间来存放广播的数据,注意这10个byte只能用来存放NAmeKEy,注意着个空间并不包含2个字节的数据包头,服务的唯一的UUID包含在UUIDKE键值中,它不能被存放在“溢出”区域,所谓的“溢出”区域,自己认为就是那另外开辟的10个字节。这些服务会在设备指定寻找这些服务时被发现,但是当APP在后台时,自己设置的NAme是不会被广播的,而且服务的UUID会被存放在“溢出”区域。

- (void)peripheralManagerIsReadyToUpdateSubscribers:(CBPeripheralManager *)peripheral //该方法用来接着发送大于19个字节的数据包,也就是说如果当数据包大于19个字节时,使用方法updateValue: forCharacteristic: onSubscribedCentrals:一次是发不完的。

常使用的一些常量:

CBPeripheralManageroptionShowPoweralertkey:一个BOOL常量,决定系统是否应该弹出警告框,在实例化的peripheral检测到系统蓝牙关闭时。默认的情况这个键值被设置为NO。

CBPeripheralManagerOptionRestoreIdentifierKey:这个字符串包含实例化的peripheral的UID,系统用这个UID来唯一的指定peripheral,因此APP应该要有相同的UID,为了对peripheral管理者成功的存储。

peripheral管理者的状态:

CBPeripheralManagerStateUnknown:这是一个即将更新的状态,表明当前peripheral当前的状态未知。

CBPeripheralManagerStateResetting:这是一个即将更新的状态,表明系统的连接状态随时都会被断开。

CBPeripheralManagerStateUnSported:当前这个开发平台不支持蓝牙低功耗,无论是central还是peripheral。

CBPeripheralManagerStateUnauthorized:表明APP不会自动切换到蓝牙低功耗模式。(这个键值目前还没有搞懂到底是怎么用的)。

CBPeripheralManagerStatePowerdeOff:当前设备的蓝牙处于关闭状态。

CBPeripheralManagerStatePowerOn:当前设备的蓝牙处于打开状态,只有当APP检测到是这种状态时,便能够开始广播数据了。

peripheral连接的优先级:

CBPeripheralManagerConnectionLatencyLow:高速传输优先级高于电池的寿命(没有找到合适的解释啊!)

CBPeripheralManagerConnectionLatebcyMedium:这个优先级是鉴于告诉传输以及电池之间的。

CBPeripheralManagerConnectionlatencyHigh:指定电池的优先级高于高速传输。

peripheral管理器的授权状态:

CBPeripheralManagerAutorizationStatusNotDetermined:用户不用选择APP是否在后台分享蓝牙数据。

CBPeripheralManagerAutorizationStatusRestricted:APP不能在后台时分享蓝牙数据,用户也不能改变这种状态,可能是由于父类在某些方面做了限制。

CBPeripheralManagerAutorizationStatusDenied:用户指定了,拒绝App在后台分享蓝牙数据。

CBPeripheralManagerAutorizationStatusAuthorized:App可以在后台随意的分享蓝牙数据。


这是第一次尝试这翻译英文文档,由于项目中要用到BLE设备做peripheral,所以自己抽空做了这些翻译,又不到的地方希望大家多指点!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值