我正在使用名为WIRELESS BLOOD PRESSURE WRIST MONITOR的BLE设备。 我已经下载了这些应用程序,并且每件事都很有效。 但是当我尝试从我的应用程序连接到设备时,我没有收到回复。 我的代码很像developer.apple.com的代码,也是tutorial。
这是我的代码:
_centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[_centralManager scanForPeripheralsWithServices:nil options:nil];
我收到centralManagerDidUpdateState
代表的通知,但即使我在服务中使用didDiscoverPeripheral
进行搜索,我也无法收到nil
。
当我去设置 - >蓝牙:我可以看到设备,它已连接,蓝牙信号开启。所以iPhone可以看到BLE设备,所以当我在我的代码中使用这些方法时
retrieveConnectedPeripheralsWithServices
获取连接设备的列表,返回0对象。
所以我不知道是什么问题,请记住BLE设备在使用自己的应用程序时效果很好,因此它的低能量不经典,而BLE设备在打开时会显示蓝牙信号应用程序。
所以来自GEEKS的任何想法:D
谢谢..
答案 0 :(得分:2)
不要在初始化中央管理器后立即搜索,而是先尝试等待电源开启的更新。
尝试以下步骤:
代码:
- (void)scanForPeripherals {
if (self.centralManager.state != CBCentralManagerStatePoweredOn) {
NSLog(@"CBCentralManager must be powered to scan peripherals. %d", self.centralManager.state);
return;
}
if (self.scanning) {
return;
}
self.scanning = YES;
[self.centralManager scanForPeripheralsWithServices:nil options:@{ CBCentralManagerScanOptionAllowDuplicatesKey: @YES }];
NSLog(@"Scanning started");
}
代码:
- (void)centralManagerDidUpdateState:(CBCentralManager *)central {
if (central.state != CBCentralManagerStatePoweredOn) {
NSLog(@"CBCentralManager not powered on yet");
return;
}
// The state must be CBCentralManagerStatePoweredOn
[self scanForPeripherals];
}
答案 1 :(得分:2)
你需要照顾很多部分:
centralManagerDidUpdateState
表示CBCentralManagerStatePoweredOn
。您之前做的任何事情都会导致错误或被忽略。因此,您对scanForPeripheralsWithServices
的调用可能会被忽略。这适用于其他API,例如您提到的retrieveConnectedPeripheralsWithServices
。