Browse Source

fix(ble_manager): 新增智能电池值选择方法防止有效数据被0覆盖

新增_getValidBatteryValue方法处理电池数据更新逻辑,避免有效电池值被0异常数据覆盖。当新值为0且当前值有效时保持原值,并记录警告日志。
weicu
lxm 1 year ago
parent
commit
a843dd1f31
  1. 26
      lib/data/services/ble_manager.dart

26
lib/data/services/ble_manager.dart

@ -395,7 +395,7 @@ class BleManager extends GetxService {
Logger.info('lxm-- overallBattery: $overallBattery');
Logger.info('lxm--准备调用_updateDeviceInfoIfNeeded');
// 更新设备信息
_updateDeviceInfoIfNeeded(
batteryLevel: overallBattery,
@ -488,8 +488,10 @@ class BleManager extends GetxService {
deviceInfo.value = deviceInfo.value!.copyWith(
batteryLevel: batteryLevel ?? deviceInfo.value?.batteryLevel,
leftEarBattery: leftEarBattery ?? deviceInfo.value?.leftEarBattery,
rightEarBattery: rightEarBattery ?? deviceInfo.value?.rightEarBattery,
leftEarBattery: _getValidBatteryValue(
leftEarBattery, deviceInfo.value?.leftEarBattery),
rightEarBattery: _getValidBatteryValue(
rightEarBattery, deviceInfo.value?.rightEarBattery),
caseBattery: caseBattery ?? deviceInfo.value?.caseBattery,
leftEarCharging: leftEarCharging ?? deviceInfo.value!.leftEarCharging,
rightEarCharging:
@ -537,6 +539,24 @@ class BleManager extends GetxService {
}
}
// 新增智能电池值选择方法
int? _getValidBatteryValue(int? newValue, int? currentValue) {
// 如果新值为null,使用当前值
if (newValue == null) return currentValue;
// 如果当前值为null或0,使用新值(即使新值为0)
if (currentValue == null || currentValue == 0) return newValue;
// 如果新值为0但当前值不为0,保持当前值(避免有效数据被0覆盖)
if (newValue == 0 && currentValue > 0) {
Logger.warning('检测到电池数据异常(新值为0),保持当前值: $currentValue');
return currentValue;
}
// 其他情况使用新值
return newValue;
}
/// 清除设备信息(用于完全断开连接或切换设备时)
void clearDeviceInfo() {
Logger.info('清除设备信息');

Loading…
Cancel
Save