iOS SWIFT - 从中​​央检测外设关闭

iOS SWIFT - Detect peripheral turning off from central

Central 应用程序是否有任何方法可以检测外围设备何时耗尽电量并因此断开连接?

我试过用这个: func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) { bleCentralManagerDelegate?.disconnectFromDeviceBLEResult(result: true)}

但是只有当外围设备请求实际断开连接时才会调用此事件,如果外围设备随机关闭则不会调用此事件。

谢谢

这是您要找的吗?

func centralManagerDidUpdateState(_ central: CBCentralManager) {
let cState = central.state

switch cState {
case .unknown:
  if ( preLogLevel == "LOGLEVEL" ) {
    CSVfuncs.writeLog(">>BT central.state is .unknown")
  }
  
case .resetting:
  if ( preLogLevel == "LOGLEVEL" ) {
    CSVfuncs.writeLog(">>BT central.state is .resetting")
  }
  
case .unsupported:
  if ( preLogLevel == "LOGLEVEL" ) {
    CSVfuncs.writeLog(">>BT central.state is .unsupported")
  }
  
case .unauthorized:
  if ( preLogLevel == "LOGLEVEL" ) {
    CSVfuncs.writeLog(">>BT central.state is .unauthorized")
  }
  
case .poweredOff:
  if ( preLogLevel == "LOGLEVEL" ) {
    CSVfuncs.writeLog(">>BT central.state is .poweredOff")
  }
  
case .poweredOn:
  if ( preLogLevel == "LOGLEVEL" ) {
    CSVfuncs.writeLog(">>BT central.state is .poweredOn")
  }
  centralManager.scanForPeripherals(withServices: servicesInterested)
  
@unknown default:
  if ( preLogLevel == "LOGLEVEL" ) {
    CSVfuncs.writeLog(">>BT central.state is Unknown Default")
  }
  break
// unknown default
}

}

遗憾的是没有。一般的 BLE 断开连接通常将“断开连接原因”作为断开连接事件的一部分(请参阅 this),但这并不可靠,并且在任何情况下 CoreBluetooth 都不会直接公开这一点。我说“不直接暴露这个”是因为你确实得到了 error 参数作为事件的一部分,但这不是直接映射到堆栈上发生的实际断开连接原因。

唯一的解决方法是您自己添加智能。换句话说,当外围设备即将关闭或电池电量非常低时,它可以将该信息发送到中央设备(通过 GATT write/notification)让它知道它即将断开连接,因为电量不足。

查看下面的链接以获取更多信息:-