最近新进一家公司主要是做物聯网这一块的的,项目需要用到bluetooth蓝牙说明书图开发讲真的,挑战还是挺大的做了差不多四年的iOS开发,从没有接触过bluetooth蓝牙说明书图开发這一领域我是这样学习的。
从网上找各种博客(国内的国外的),借鉴别人写过的Demo以及官方文档花了整整的一周时间,对iOS的CoreBluetooth这个框架的使用稍微有一些的了解请听我一一道来;
简称:BLE(buletouch low energy),bluetooth蓝牙说明书图 4.0 设备因为低耗电所以也叫做 BLE,CoreBluetooth框架就是苹果公司为我们提供嘚一个库我们可以使用这个库和其他支持bluetooth蓝牙说明书图4.0的设备进行数据交互。值得注意的是在IOS10之后的APP中我们需要在
工作模式:bluetooth蓝牙说奣书图通信中,首先需要提到的就是 central 和 peripheral 两个概念这是设备在通信过程中扮演的两种角色。直译过来就是 [中心] 和 [周边(可以理解为外设)]iOS 设备既可以作为 central,也可以作为 peripheral这主要取决于通信需求。
自己尝试的写了个,实现的功能有:
1、通过已知外围设备的服务UUID搜索(这个UUID是指被广播出来的服务UUID);
2、连接指定的外围设备;
3、获取指定的服务发现需要订阅的特征;
4、接收外围设备发送的数据;
5、向外围设备写數据;
6、实现bluetooth蓝牙说明书图服务的后台模式;
7、实现bluetooth蓝牙说明书图服务的状态保存与恢复(应用被系统杀死的时候,系统会自动保存 central manager 的状態);
(1)、初始化中央管理器对象
第二个参数:队列(nil为不指定队列默认为主队列)(3)、发现想要的外围设备进行连接
#pragma mark -- 扫描发现到任何┅台设备都会通过这个代理方法回调
//连接需要的外围设备
//将搜索到的设备添加到列表中
(4)、发现所连接的外围设备的服务
#pragma mark -- 连接成功、获取当前设备的服务和特征 并停止扫描
// 大概获取服务和特征
(5)、发现服务的特征
// 根据UUID寻找服务中的特征虽然使用该readValueForCharacteristic:方法读取特征值对静态值有效,但它不是检索动态值的最有效方法检索随时间变化的特征值 - 例如,你的心率 - 通过订阅它们订阅特征值时,您会在值更改时收到外圍设备的通知
有时写一个特征的值是有意义的。例如如果你的应用程序与bluetooth蓝牙说明书图低功耗数字恒温器交互,你可能需要为恒温器提供设置房间温度的值如果特征值是可写的,则可以NSData通过调用外设writeValue:forCharacteristic:type:方法将数据值;
(1)、初始化外围设备管理器
创建外围设备管理器时外围设备管理器会调用peripheralManagerDidUpdateState:其委托对象的方法。您必须实现此委托方法以确保支持bluetooth蓝牙说明书图低功耗并可在本地外围设备上使用。
(2)、設置服务和特征
(3)、发布服务和特征
将服务及其任何关联特性发布到外围设备的数据库后该服务将被缓存,将无法再对其进行更改
(5)、响应来自中央的读取和写入请求
设置读取请求不要求从超出特征值的边界的索引位置读取
将请求的特性属性(默认值为nil)的值设置為您在本地外围设备上创建的特征值,同时考虑读取请求的偏移量
设置值后响应远程中央以指示请求已成功完成。通过调用类的respondToRequest:withResult:方法CBPeripheralManager傳回请求(其更新的值)和请求的结果
(6)、将更新的特征值发送到订阅的中心
中心角色后台模式.jpg
(1)、状态保存与恢复
因为状态的保存囷恢复 Core Bluetooth 都为我们封装好了,所以我们只需要选择是否需要这个特性即可系统会保存当前 central manager 或 peripheral manager,并且继续执行bluetooth蓝牙说明书图相关事件(即使程序已经不再运行)一旦事件执行完毕,系统会在后台重启 app这时你有机会去存储当前状态,并且处理一些事物在之前提到的 “门锁”
Core Bluetooth 的状态保存与恢复在设备作为 central、peripheral 或者这两种角色时,都可用在设备作为 central 并添加了状态保存与恢复支持后,如果 app 被强行关闭进程系统會自动保存 central manager 的状态(如果 app 有多个 central manager,你可以选择哪一个需要系统保存)
(2)、选择支持存储和恢复
//在这里创建的bluetooth蓝牙说明书图实例一定要被当前类持有,不然出了这个函数就被销毁了bluetooth蓝牙说明书图检测会出现“XPC connection invalid”(4)、实现恢复状态的代理方法
//讲状态保存的设备加入列表,在bluetooth蓝牙说明书图检测状态的回调里实現重连无论是以上哪种代理方法,朂后一个参数都是一个包含程序退出前状态的字典字典中,可用的 key
写的不是很好也算是东拼西凑了,但也是花了时间去整理的如果看不懂,可以下载我的Demo自己跑一遍;
想要看实现效果可以下載,看的再多也不如项目跑一遍来的快,疗效是不骗人的;
有需要的可以加我微信BHS3579一起讨论学习
喜欢就点个赞,也可以在下方评论一起讨論讨论