超出范围的消息和自动重新连接 - BLE设备 - IOS

时间:2015-03-24 15:15:33

标签: ios objective-c bluetooth-lowenergy reconnect

我目前正在开发一款从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。

1 个答案:

答案 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.
    }