前言:进行本次阅读在之前,博主默认读者已经熟悉CoreBluetooth系统框架,并能够基本使用。
当我们使用CoreBuletooth系统框架进行蓝牙开发的时候,有时候因为某种功能需求需要拿到特定的蓝牙设备进行特定的操作,这个就表示我们能够拿到代表特定的蓝牙设备的唯一标识,通过唯一标识来确认是哪一台蓝牙设备。
在正式讲解之前,我们先讲解基础,在CoreBluetooth系统框架中,我们能够看到当我们通过中心模式扫描到蓝牙设备的时候,会返回一些属性:蓝牙设备的名字、信号强度、状态、服务、标识符。
//蓝牙设备的名字
@property(retain, readonly, nullable) NSString *name;
//蓝牙设备的信号强度
@property(retain, readonly, nullable) NSNumber *RSSI NS_DEPRECATED(NA, NA, 5_0, 8_0);
//蓝牙设备的状态
/*
typedef NS_ENUM(NSInteger, CBPeripheralState) {
//断开连接
CBPeripheralStateDisconnected = 0,
//正在连接
CBPeripheralStateConnecting,
//已经连接
CBPeripheralStateConnected,
//正在断开连接
CBPeripheralStateDisconnecting NS_AVAILABLE(NA, 9_0),
} NS_AVAILABLE(NA, 7_0);
*/
@property(readonly) CBPeripheralState state;
//包含的服务
@property(retain, readonly, nullable) NSArray<CBService *> *services;
//继承于父类CBPeer的identifier的标识符属性
@property(readonly, nonatomic) NSUUID *identifier NS_AVAILABLE(NA, 7_0);
情形一:(蓝牙外设的名字不一样,那么蓝牙外设的名字就可以作为我们需要的唯一标识)当我们使用中心设备进行扫描的时候,即在
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *, id> *)advertisementData RSSI:(NSNumber *)RSSI;
方法中,我们就可以通过扫描到的蓝牙外设的名字(peripheral.name)来进行针对性的操作。
情形二:(蓝牙外设的名字都一样,但是不需要很严苛的知道连接的是那一台外部设备)
有一些公司的外部设备的名字都是一样的,但是进行连接或者其他操作的时候,没必要知道具体的是哪一台设备,那么就可以使用蓝牙外设的UUIDString(即peripheral.identifier.UUIDString)来作为唯一标识。但是,需要注意的一点:不同的中心设备(也可以说是不同的手机)对于同一台蓝牙设备,获取到的UUIDString是不一样的。
举例说明一下:对于同一台蓝牙设备,我的手机进行扫描,然后读取它的UUIDString,和你的手机进行扫描,获取到的UUIDString是不同的。