我目前正在开发一款从BLE设备获取数据的应用程序 - 类似于心脏监护仪。应用程序从设备读取数据,然后当它获取特定数量的数据时,它会创建.csv文件并将其上载到服务器中。一切正常,除非设备超出范围。该应用程序只是停止接收数据,并且无法识别连接丢失。我没有收到任何错误消息。该应用程序只是停在“获取数据”循环的中间,并一直等待从未到来的数据。当设备返回范围时,没有任何反应。
我想显示一条警告,告知BLE设备超出范围。当设备再次处于该范围内时,应用程序应自动重新连接到该设备,然后继续从设备读取数据。我该如何实现呢?我试图获得CM状态 - 使用下面的函数 - 但它不起作用。
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
printf("Status of CoreBluetooth central manager changed %d (%s)\r\n",central.state,[self centralManagerStateToString:central.state]);
}
我甚至尝试在循环中添加一个if子句来检查设备状态,但它也不起作用。
我正在使用德州仪器芯片CC2540。
答案 0 :(得分:0)
正如Paulw11和SJoshi(谢谢你们)所建议的,我必须实现didDisconnectPeripheral方法。所以,我就是这样做的:
.h文件:
// will be invoked once disconnected
-(void)centralManager:(CBCentralManager *)central
didDisconnectPeripheral:(CBPeripheral *)peripheral
error:(NSError *)error;
.m文件:
-(void) centralManager:(CBCentralManager *)central
didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error {
[central connectPeripheral:peripheral options:nil];
// you can add whatever you want here.
// will execute when the peripheral loose its connection.
}