测试测试 | ✗ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
发布最后发布 | 2016年9月 |
由Michał Mizera、Polidea、Maciej Oczko维护。
PLXCoreBluetooth
是在 CBCentralManager
和 CBPeripheral
上的一薄层抽象层,它使您可以通过使用 Reactive Cocoa 进行编程。
查看示例应用,它以非常直接的方式说明了所有常见的用法。要运行它,先从仓库中克隆,然后从 Example 目录中先运行 pod install
,或者直接运行 pod try PLXCoreBluetooth
。
让我们尝试搜索一些外围设备,连接到它们,查找给定服务的特征并读取。很简单。
@weakify(self)
[[[[self.centralManager rac_scanForPeripheralsWithServices:@[mySpecialService]
count:PLXCBCentralManagerScanInfiniteCount
options:@{CBCentralManagerScanOptionAllowDuplicatesKey : @NO}]
reduceEach:^id(CBPeripheral *peripheral, NSDictionary<NSString *, id> *advertisementData, NSNumber *RSSI) {
return peripheral;
}]
flattenMap:^RACSignal *(CBPeripheral *peripheral) {
@strongify(self)
return [[[self.centralManager
rac_connectPeripheral:peripheral options:nil]
flattenMap:^RACSignal *(CBPeripheral *_) {
return [peripheral rac_discoverCharacteristics:nil forService:mySpecialService];
}]
flattenMap:^RACSignal *(NSArray<CBCharacteristic *> *characteristics) {
return [[[characteristics.rac_sequence signal]
flattenMap:^RACSignal *(CBCharacteristic *characteristic) {
return [peripheral rac_readValueForCharacteristic:characteristic];
}]
collect];
}];
}]
有两个扩展集,第一个是用于 CBCentralManager
的,第二个是用于 CBPeripheral
的。
CBCentralManager
这是确定以下所有方法是否仅在 CBCentralManager
处于已开启状态时才继续执行的一个属性。如果设置为 YES,则每个方法都会阻塞并等待已开启状态。否则,默认行为是在出现错误后立即结束。
默认设置为 NO。
@property(nonatomic, assign) BOOL plx_shouldWaitUntilPoweredOn;
搜索方法返回一个信号,包含给定服务的第一次搜索到的 count
个外围设备的信息元组(外围设备,广告数据,RSSI)。对于无限搜索,应传递 PLXCBCentralManagerScanInfiniteCount
。
如果搜索有限并且识别到所有外围设备,则会自动调用 stopScan
。当信号被丢弃时,也会调用 stopScan
。
- (RACSignal *)rac_scanForPeripheralsWithServices:(nullable NSArray<CBUUID *> *)serviceUUIDs
count:(NSInteger)count
options:(nullable NSDictionary<NSString *, id> *)options;
停止搜索方法是一个包装器,用于调用 stopScan
,并在调用后返回 @YES
。
- (RACSignal *)rac_stopScan;
连接方法连接到外围设备,并在成功时返回它。在连接失败时,将返回错误信号。
- (RACSignal *)rac_connectPeripheral:(CBPeripheral *)peripheral
options:(nullable NSDictionary<NSString *, id> *)options;
断开连接方法从外围设备断开连接,并在成功时返回它。在断开连接失败时返回错误信号。
- (RACSignal *)rac_disconnectPeripheralConnection:(CBPeripheral *)peripheral;
有一个信号,当打开属性改变时更新。
- (RACSignal *)rac_isPoweredOn;
CBPeripheral
这个属性用于确定下面所有方法是否只有在CBPeripheral
处于连接状态时才继续执行。如果设置为YES,则每个方法都将阻塞并等待连接状态。否则,默认行为是在出错时立即完成。
默认设置为 NO。
@property(nonatomic, assign) BOOL plx_shouldWaitUntilConnected;
该属性返回最新的名称,并订阅外围设备名称的变化。
@property(nonatomic, strong, readonly) RACSignal *rac_name;
此方法返回用于订阅外围设备名称变化的通知。
- (RACSignal *)rac_peripheralDidUpdateName;
此方法返回包含随时间变化的外围设备服务的信号。
- (RACSignal *)rac_peripheralDidModifyServices;
返回发现的服务数组。
- (RACSignal *)rac_discoverServices:(nullable NSArray<CBUUID *> *)serviceUUIDs;
返回给定服务的已发现包含服务的数组。
- (RACSignal *)rac_discoverIncludedServices:(nullable NSArray<CBUUID *> *)includedServiceUUIDs
forService:(CBService *)service;
返回给定服务的已发现特性的数组。
- (RACSignal *)rac_discoverCharacteristics:(nullable NSArray<CBUUID *> *)characteristicUUIDs
forService:(CBService *)service;
返回给定特性的已发现描述符的数组。
- (RACSignal *)rac_discoverDescriptorsForCharacteristic:(CBCharacteristic *)characteristic;
此方法返回RSSI值并完成,否则发出错误信号。
- (RACSignal *)rac_readRSSI;
这些方法返回读取值并在成功读取时完成,失败时发出错误信号。
- (RACSignal *)rac_readValueForCharacteristic:(CBCharacteristic *)characteristic;
- (RACSignal *)rac_readValueForDescriptor:(CBDescriptor *)descriptor;
这些方法返回布尔值YES并在成功写入时完成,失败时发出错误信号。
- (RACSignal *)rac_writeValue:(NSData *)data
forCharacteristic:(CBCharacteristic *)characteristic
writeType:(CBCharacteristicWriteType)writeType;
- (RACSignal *)rac_writeValue:(NSData *)data
forDescriptor:(CBDescriptor *)descriptor;
此方法返回布尔值YES,如果更改成功则完成,否则返回错误。
- (RACSignal *)rac_setNotifyValue:(BOOL)enabled
forChangesInCharacteristic:(CBCharacteristic *)characteristic;
此方法返回更新值(从peripheral:didUpdateValueForCharacteristic:error:
回调中获取),如果更新失败则返回错误。
- (RACSignal *)rac_setNotifyValue:(BOOL)enabled
andGetUpdatesForChangesInCharacteristic:(CBCharacteristic *)characteristic;
此方法返回包含值或错误的信号流(从peripheral:didUpdateValueForCharacteristic:error:
回调中提取)。
- (RACSignal *)rac_listenForUpdatesForCharacteristic:(nullable CBCharacteristic *)characteristic;
PLXCoreBluetooth可通过CocoaPods使用。要安装它,只需在Podfile中添加以下行:
pod "PLXCoreBluetooth"
Maciej Oczko, [email protected]
Michal Mizera, [email protected]
PLXCoreBluetooth可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。