Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
超出范围消息和自动重新连接-可恢复设备-IOS_Ios_Objective C_Bluetooth Lowenergy_Reconnect - Fatal编程技术网

超出范围消息和自动重新连接-可恢复设备-IOS

超出范围消息和自动重新连接-可恢复设备-IOS,ios,objective-c,bluetooth-lowenergy,reconnect,Ios,Objective C,Bluetooth Lowenergy,Reconnect,我目前正在开发一个应用程序,它可以从一个可编程设备获取数据,类似于心脏监护仪。该应用程序从设备读取数据,然后在获得特定数量的数据时,创建一个.csv文件并将其上载到服务器。除设备超出范围外,其他一切正常。应用程序只是停止接收数据,无法识别连接是否丢失。我没有收到任何错误消息。应用程序只是停在“获取数据”循环的中间,一直等待一个永远不会出现的数据。当设备回到范围内时,不会发生任何事情 我想显示一个警报,通知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。

正如Paulw11和SJoshi(谢谢大家)所建议的,我必须实现DIDDisconnect外围方法。我是这样做的:

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

您是否实现了
didDisconnectPeriphal
delegate方法?此处同意@Paulw11。实现断开事件处理程序将是一个“步骤1”。我也做过类似的事情,你也可以用另一种方法来处理它,就是不断跟踪RSSI,看看它是否会随着时间的推移而减小(例如,理论上,设备离我们越来越远)。重新连接,这可能需要从外围设备端完成-除非你想让你的应用程序不断扫描和跟踪附近的BLE设备。谢谢,这解决了问题。完美的