iOS面试 - 蓝牙的基本使用
在 iOS 中,蓝牙是基于 4.0 标准的,设备间低功耗通信。
其中 Peripheral 外设相当于 Socket 编程中的 Server 服务端,Central 中心相当于 Client 客户端。
本地中心 -> 远程外设
本地外设 -> 远程中心
使用流程:
建立中心角色 —> 扫描外设(discover)—> 发现外设后连接外(connect) —> 扫描外设中的服务和特征(discover) —> 与外设做数据交互(explore and interact) —> 断开连接(disconnect)。
1. 建立中心角色
上面的 delegate 为 CBCentralManagerDelegate,后续蓝牙相关的回调都会在此。
queue 代表蓝牙在哪个队列里面操作,如果传入 nil 默认为主队列,值得注意的是后续的回调也是在传入的队列中调用的,所以如果传入的是非主线程的队列,在 delegate 中需要操作 UI 时需要手动切换到主线程。
CBCentralManager 对象创建后会回调到 centralManagerDidUpdateState 方法来检测蓝牙可用状态,这时我们可以提醒用户设备是否支持蓝牙,是否打开了蓝牙。
2. 扫描外设
如果 serviceUUIDS 为 nil 则会扫描周围所有的设外设,反之只会扫描 UUID 匹配的外设。
CBCentralManagerScanOptionAllowDuplicatesKey 默认为 false,此次扫描中发现过设备则跳过不回调,我们这里传入 true,因为下面做外设掉线的处理时需要用到。
传入的 serviceUUIDS 数组元素为 CBUUID 类型,千万不要传入 String,后面的操作也是如此,不然会碰到很多奇葩问题。
发现外设后会回调到 centralManager(central:didDiscoverPeripheral:advertisementData:RSSI:)其中,perpheral 则代表着外设,我们需要保存起来,后续的对外设的操作都是基于 perpheral对象的。
3. 连接外设
传入上面保存的外设对象,如果连接失败后会回调到centralManager(central:didFailToConnectPeripheral:,error:),连接成功后会回调到 centralManager(central:didConnectPeripheral:),这个时候我们只是连接上外设而已,还需要发现外设中的服务与特征。
4. 发现服务与特征
5. 发送数据
6. 读取数据
7. 断开连接
在蓝牙交互的二种角色中,通常 APP 端扮演中央 Central 的角色,设备扮演外设 Peripheral 的角色创建 CBCentralManager 对象时传入的 queue 决定了后续 CBCentralManagerDelegate、CBPeripheralDelegate 等回调的所在线程一个外设设备可包含一个或多个服务,一个服务可包含一个或多个特征,读写操作最终是针对特征。
蓝牙的缓冲大小只有 20bytes,在发送数据时最多只能发送 20bytes,所以得分多次发送,数据的一体性可以用 EOM 标识符表标识。
iOS面试 - 蓝牙的基本使用相关推荐
- iOS面试准备 - ios篇
iOS面试准备 - ios篇 ios面试准备 - objective-c篇 ios面试准备 - 网络篇 IOS面试准备 - C++篇 iOS面试准备 - 其他篇 运行时 https://juejin. ...
- 关于IOS的蓝牙(转)
关于IOS的蓝牙 首先,你要了解你的目的是什么,一般的IOS蓝牙开发有以下三种目的: 1. IOS设备和IOS设备之间交互 好消息是:ios6.0可以把iPhone手机当从设备了,可以两台iPhone ...
- 「iOS 面试之道」勘误(二)
本文是「iOS 面试之道」勘误系列的第二篇. Swift 初始化方法描述的漏洞 书中 105 页的描述是:Swift 初始化方法必须保证所有非 Optional 的成员变量都完成初始化. 这个表述是不 ...
- android 无appid分享_App ID 和Bundle ID 有什么不同?ios面试攻克篇(六)
'写在前面的话' 这些是我对iOS面试时会碰到的问题的解决方法,整理出来分享给大家,有些错误不要 笑了,希望对大家有所帮助.大家有更好的解决办法也欢迎沟通交流. 一直以来都有写点儿东西的想法,就从笔记 ...
- ios kvo 要引入_腾讯社招iOS面试记录
毕业好几年了,上周发送了简历给腾讯,参加了腾讯面试.具体部门这边就不说了.这次面试还是收获到了很多. 一面电话面试: 面试官主要是针对iOS相关的基础问题. 先简单自我介绍一下自己 对mrc和arc的 ...
- iOS面试中经常问的点 - RunTime
一. RunTime简介 我将iOS的一些学习视频书籍资料总结在"码农Style"公众号里,需要的小伙伴可以自行获取 想要一起探讨学习iOS底层原理,架构的可以加我Q_233668 ...
- 分割view窗口不响应onmousewheel_什么是响应者链?ios面试攻克篇(三)
'写在前面的话' 这些是我对iOS面试时会碰到的问题的解决方法, 整理出来分享给大家,有些错误不要 太好笑,希望对大家有所帮助. 大家有更好的解决办法也欢迎沟通交流. 一直以来都有写点儿东西的想法, ...
- [转] 上级向的十个iOS面试问题
上级向的十个iOS面试问题 转自 http://onevcat.com/2013/04/ios-interview/ 不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术 ...
- 最新iOS面试必看题视频教程(附大神简历要素)
2019独角兽企业重金招聘Python工程师标准>>> 本文是由尚学堂iOS学院总结的ios开发者在求职时会遇到的一些面试题 ,并通过实际代码演练将课程详尽的讲解出来,希望对学习io ...
最新文章
- 第八届“数学、计算机与生命科学交叉研究” 青年学者云论坛(5月15日9:00-16:40)...
- oracle em登陆不了,账户密码过期
- 【Paper】An Experiment Comparing Double Exponential Smoothing and Kalman Filter-Based Predict
- COMPUTER HARDWARE OPENCART 主题模板 ABC-0059
- LDAP之三:利用开源框架LDAPTemplate和JLDAP访问LDAP
- artTemplate模板引擎的源码拜读
- CSDN - 屏蔽百度广告
- win10开启文件共享服务器,墨涩网 - Windows10开启局域网文件共享功能——墨涩网...
- 如何在软件里显示编译时间
- 串级控制系统的计算机控制原理图,串级PID控制原理
- USB调试助手功能完善
- 国产linux操作系统深度系统20.3发布(推荐)
- 2022年SCI期刊最新影响因子正式发布
- Python 伪开发者对于搜狐云景的测评
- mybatis百度云盘分享
- 百分号编码和汉字的转换
- 搞定动画之 JQuery 中的自定义动画
- 安徽省支持科技创新政策通知,兑现项目奖补详情
- matlab等于本身是什么命令,matlab中的m=size是什么意思
- How to access SMTP/POP server using telnet - 用 Telnet 如何访问邮件服务器