对 iOS 蓝牙的一些探索

蓝牙是瑞典的爱立信公司在1994年发明的,到现在已有20多年的历史,大概经历了以下几个版本。

1和1.1版本,主要用于耳机和设备之间的无线通信

2.0和2.1版本,增加了数据的传输速度,因此可以允许立体声音乐从手机播放器传都无线耳机上

3.0版本,允许更高的数据传输速率,可以做到在设备间传输大文件

4.0版本,我们称之为蓝牙智能

超级产品经理

核心与特点

蓝牙,是一个基于点对点的通信系统,其中一台拥有数据的设备作为服务器,另一台消费数据的设备作为客户端,作为一个无线技术标准,可以实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换。

两部iphone手机,手机A里面有一手好听的歌曲,手机B里面没有,可以把手机A里面的歌曲通过蓝牙设备传送给B手机,那么A手机就是服务器,B手机就是客户端了。

蓝牙具有实现简单的特点,作为一个无线技术标准,可以实现固定设备,移动设备和楼宇个人域网之间的短距离数据交换,不需要系统层的驱动。换句话说,应用既可以是驱动,也可以是软件。

蓝牙开发

最常用的蓝牙sdk 是CoreBluetooth.framework 提供的。它是从ios5开始可用,是专门为蓝牙设备设计的。

在ios中,一般服务器叫做外围设备,客户端叫做中心设备。Ios设备作为客户端从一个蓝牙设备读取数据,可以用CoreBluetooth.framework里的CBCentralManager这个类来做事情。Ios设备作为服务端发送数据,则用CBPeripheral 类来表示。

客户端的功能实现的基本思路就是,实例化CBCentralManager 类,然后设置代理,扫描周围服务端,若扫描到之后,则进行连接,连接成功之后,就可以顺利接收数据了。

具体实现步骤:

创建客户端

centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:nil];

扫描外围设备

[cetralManager scanForPeripheralsWithServices:nil options:nil];

找到外围设备后,通过CBCentralManagerDelegate 的 centralManager:didDiscoverPeripheral:advertismentData:RSSI:方法可以获取外围设备的详细信息。

发现外围设备,并连接软件而言,其用户体验的量化标准便是appstore的评分。

[centralManager connectPeripheral:peripheral options:nil];

寻找外围设备提供的服务

在委托方法didConnectPeripheral中发现外围设备提供的服务。

[Peripheral discoverServices:nil];

外围设备提供的服务列表是通过 CBCentralManagerDelegate 中的另一个委托方法 peripheral:didDiscoverServices:通知的。

从相应匹配的服务中发现符合特性

通过didDiscoverCharacteristcsForService:error:委托回调可以得到制定服务的特性列表。

收到数据,或者处理数据

通过委托方法 peripheral:didUpdateValueForCharacteristic:error:中接收数据。

超级产品经理

服务端的实现方法与客户端大同小异,服务端是通过CBPeripheral类来实现,它的大概思路为,创建实例化对象,设置代理,创建服务设备,然后与客户端进行连接,若发现已经连接,则可以向客户端发送数据。

具体实现方法:

初始化外围设备管理器

manager = [[CBPeripheralManager alloc]initWithDelegate:self queue:nil]

外围设备管理器委托。

通过CBPeripheralManager 的代理方法 peripheralManagerDidUpdateState:来实现委托。

创建外围设备服务

CBUUID *serviceUUID = [CBUUID UUIDWithString:kServiceUUID];

service = [[CBMutableService alloc] initWithType:serviceUUID primary:YES];

CBUUID * charcteristicUUID = [CBUUID UUIDWithString:k CharcteristicUUID];

characteristic = [[CBMutableCharcteristic alloc]initWithType:kCharacteristicUUID properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];

[service setCharacteristics:@[characteristic]];

[manager addService:service];

外围设备的didAddService 委托

添加服务器之后,就是开启广播。在成功添加服务器的委托回调里开启广播

[manager dtartAdvertising:@{CBAdertisementDataLocalNameKey:@“namekey”,CBAdertisementDataServiceUUIDkey:@[[CBUUID UUID WithString:kServiceUUID]]}];

中心设备订阅委托回调didSubscribeToCharacteristic

[subscribedCentrals addObject:central];

通知已订阅设备

[manager updateValue:data forCharacteristic:characteristic onSubscribedCentrals:subscribedCentrals];

小结

蓝牙的发展,是我们生活智能化的萌芽,它就像我们人类的语言一样,可以让智能设备更好的交流沟通,让科技之间更好的协作,也是软件与硬件连接的一个桥梁,蓝牙技术值得你我进行深入探索。

本文作者: 班建华(点融黑帮),来自点融北京技术团队,拥有三年金融行业软件研发经验,热爱软件开发,喜欢探索新的技术。

关键字:产品经理, 设备

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部