注意:Apple 的 CoreBluetooth 库(该项目使用)仅支持蓝牙 LE 4.0+。我们希望未来获得更新以支持其他蓝牙版本。
ReactiveCoreBluetooth 是一个库,通过提供 CoreBluetooth 框架的 ReactiveCocoa 信号而不是代理来实现对 Apple 的包装。此库目前处于开发中,提供基本的蓝牙 LE 设备管理。在此仓库中包含了一个示例应用程序,展示了如何使用此包装器。
#import "ReactiveCoreBluetooth.h"
@property (nonatomic) BluetoothLEService* bluetoothLEService;
-(void) viewDidLoad
{
self.bluetoothLEService = [[BluetoothLEService alloc] init];
[bluetoothLEService.availableDevicesSignal subscribeNext:^(NSArray* devices) {
for (CBPeripheral* p in devices)
{
NSLog(@"%@", p.name);
}
}];
[bluetoothLEService.peripheralConnectedSignal subscribeNext:^(CBPeripheral* device) {
NSLog(@"Connected to %@", device.name);
}];
[bluetoothLEService.peripheralDisconnectedSignal subscribeNext:^(CBPeripheral* device) {
NSLog(@"Disconnected from %@", device.name);
}];
[bluetoothLEService.scanningForDevicesSignal subscribeNext:^(NSNumber* x) {
BOOL isScanning = [x boolValue];
if (isScanning)
{
NSLog("Scanning for devices...");
}
else
{
NSLog("Not scanning for devices.");
}
}];
[bluetoothLEService.bluetoothStateSignal subscribeNext:^(NSNumber* x) {
CBCentralManagerState state = (CBCentralManagerState)[x integerValue];
NSString* status;
switch (state)
{
case CBCentralManagerStatePoweredOff:
status = @"Off";
break;
case CBCentralManagerStatePoweredOn:
status = @"On";
break;
case CBCentralManagerStateResetting:
status = @"Resetting";
break;
case CBCentralManagerStateUnauthorized:
status = @"Unauthorized";
break;
case CBCentralManagerStateUnknown:
status = @"Unknown";
break;
case CBCentralManagerStateUnsupported:
status = @"Unsupported";
break;
default:
status = @"Error: State Unknown";
break;
}
NSLog(@"Bluetooth status: %@", status);
}];
[bluetoothLEService scanForAvailableDevices];
}
我们更喜欢使用 ReactiveCocoa 信号和块来管理异步事件而不是使用代理。如果您不喜欢在所有地方实现代理,这就是您需要的蓝牙 LE 库!
将以下行添加到您的 Podfile 中
pod 'ReactiveCoreBluetooth'
然后在与您的 Podfile 同一目录下运行以下命令
pod install
要开始扫描设备,调用 scanForAvailableDevices
。您可以通过监听 scanningForDevicesSignal
来确定设备是否正在扫描。要接收有关可用设备列表变化的通知,请监听 availableDevicesSignal
。要停止扫描设备,调用 stopScanningForDevices
。
要捕获设备连接,订阅 peripheralConnectedSignal
。要捕获设备断开,订阅 peripheralDisconnectedSignal
。
监听 bluetoothStateSignal
。
《codecacheDurationForDevices
设置允许您更改连接设备时等待的时间长度。默认为 5 秒。
《codecachePollingInterval
设置允许您更改多久轮询缓存以查找已过期的设备。默认为 3 秒。
connectOnDiscovery
设置允许你指定是否在将设备添加到可用设备信号之前连接到该设备。某些 BLE 设备需要连接来提供名称,而其他设备可能在连接启动后可能会有不同的行为,或者停止自我广告。
马特·鲍曼 (matt at citrrus dot com)
版权所有 2013 Citrrus, LLC。
遵照 MIT 许可证。