iOS端蓝牙开发框架
1.gamekit多用于对战游戏,从7.0过期
2.MultipeerConnectivity,代替上面的,多用于非联网状态下,通过Wi-Fi或者蓝牙来进行文件共享,且只能用于ios设备之间连接,局限于同一个app交互
3.externalAccessoy:用于第三方蓝牙设备交换,但设备必须经过评估mfi认证.
4.(主打)CoreBluetooth:就是所谓的BLE,可用于第三方蓝牙设备交换,必须要支持蓝牙4.0硬件至少4s,系统至少6.0以上,最大特点主低功耗,也是目前应用最广泛的主流框架,常用语运动手环,智能家居
CoreBluetooth使用
中心模式central,
外设模式peraitral
服务–service一个设备可以包含多个服务,一个服务里面可以包含多个特征
特征–characteristic
中心模式,流程
1建立中心设备 centralmanger,
2扫描外围设备 scanForPeripheralsWithServices:nil options:
3链接外围设备 [_manager connectPeripheral:_peripheral options:nil];
4扫描外部设备中的服务与特征 [peripheral discoverServices:nil];
5,利用相关特征与外部设备首发数据
蓝牙的基本属性
uuid:唯一标识符,可以用来区分设备,
rssl:信号强弱值,防丢弃之类的可以用这个
name:设备名称
service uuid :服务,一个服务里面包含多个characteristic
characteristic:特征 ,用uuid区分
注意点
最后还有一个重要的补充,当我们已经找到了我们感兴趣的characteristic后,他的value并不一定通过1方法或者2方法就可以接收的,就算可以接收,有时候只能用1,有时候只能用2。
这牵扯到characteristic的一个property:
typedef enum {
CBCharacteristicPropertyBroadcast = 0x01,
CBCharacteristicPropertyRead = 0x02,
CBCharacteristicPropertyWriteWithoutResponse = 0x04,
CBCharacteristicPropertyWrite = 0x08,
CBCharacteristicPropertyNotify = 0x10,
CBCharacteristicPropertyIndicate = 0x20,
CBCharacteristicPropertyAuthenticatedSignedWrites = 0x40,
CBCharacteristicPropertyExtendedProperties = 0x80,
CBCharacteristicPropertyNotifyEncryptionRequired = 0x100,
CBCharacteristicPropertyIndicateEncryptionRequired = 0x200,
} CBCharacteristicProperties;
当为read(0x02)的时候,我们用1方法可以查看,用2就会出错。当为notify(0x10)的时候我们就得用2方法。其他就不说明了,比如write就只能写value······
所以当我们想查看value的时候,先了解一下这个characteristic的property,看是不是能让我们读的。怎么查看?找BLE外设的设备厂商或者查看外设的说明书。
推荐将value经常变化的characteristic的property设为notify。
5.蓝牙后台运行
若要实现蓝牙4.0在APP进入后台时仍能工作,传输数据,不用写代码,只需要修改xxx-info.plist文件即可
在Required background modes中加入两项
App shares data using CoreBluetooth 和 App communicates using CoreBluetooth 即可
iOS10之后要再Info.plist文件中加入key为Privacy - Bluetooth Peripheral Usage Description的使用蓝牙设备描述
使用
导入 #import