蓝牙实现打印实现
蓝牙连接外设,通过系统框架实现,步骤如下:判断是否打开蓝牙——> 搜索蓝牙设备——>连接蓝牙设备——>扫描蓝牙服务——>搜索服务特性——>如果有打印特性 即可实现打印
判断蓝牙是否打开
CBCentralManager *manager = [[CBCentralManageralloc]init]; self.manager = manager; 一旦设置代理在运行程序的时候,就会调用协议里一个必须要完成的方法: - (void)centralManagerDidUpdateState:(CBCentralManager *)central;
蓝牙扫描设备
- (void)scanForPeripheralsWithServices:(nullable NSArray *)serviceUUIDs options:(nullable NSDictionary *)options;
( 第一个参数serviceUUIDs表示扫描带有相关服务的外部设备,例如填写@[[CBUUIDUUIDWithString:@"需要连接的外部设备的服务的UUID"]],即表示带有需要连接的外部设备的服务的UUID的外部设备,nil表示扫描全部设备;
options 暂时可以写一个@{CBCentralManagerScanOptionAllowDuplicatesKey :@YES}这样的参数,YES表示会让中心设备不断地监听外部设备的消息,NO就是不能
筛选设备并根据指定蓝牙设备名字连接
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI; 在这个方法里,我们可以根据我们获取到的硬件的某些条件进行筛选,然后连接我们需要连接的外部设备,例如连接名字带有A的外部设备:
if ([peripheral.namehasPrefix:@"A"] ) {
[manager connectPeripheral:peripheraloptions:nil]; //连接设备
}
判断连接成功失败-代理方法---(如果连接成功就可以处理你想处理的事情啦~)
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral;(连接成功)
- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral*)peripheral error:(nullableNSError *)error;(连接失败)
pragma mark ---------------- 发现服务的代理 -----------------
( 4、我们在连接成功的方法中开始扫描外部设备的服务[peripheral discoverServices:nil];)
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(nullable NSError *)error
#pragma mark ---------------- 服务特性的代理 -------------------- - (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(nullable NSError *)error { if (error)
#pragma mark ---------------- 写入数据的回调 -------------------- - (void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(nullable NSError *)error {
扫描到特征之后,我们就可以拿到相应的特征进行读写操作。
例如进行读取数据的操作:
if ([characteristics.UUID.UUIDStringisEqualToString:@"你需要的特征的UUID"]){
//读取特征数据
[peripheral readValueForCharacteristic:characteristics];
}
这就读取了特征包含的相关信息,只要读取就会进入另外一个方法:
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic*)characteristic error:(NSError *)error;
在这个方法里,我们就可以拿到我们需要的数据了。进行写的操作是
[peripheralwriteValue:data类型的数据 forCharacteristic:使用到的特征 type:CBCharacteristicWriteWithResponse]; 最后的type类型有两个,分别是CBCharacteristicWriteWithResponse和 CBCharacteristicWriteWithoutResponse;
选择第一个,每往硬件写入一次数据都会进入
- (void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic*)characteristic error:(NSError *)error;
网友评论