拔电池掉电后重新开机,电池使用情况界面已用多长时间数据出现负数

本文介绍了一个关于电池使用时间显示为负数的问题及其解决方案。该问题是由于拔除电池导致的数据异常引起的,并通过修改BatteryHistoryChart.java源代码中的判断条件来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 原因:拔掉电池后会导致Battery history的一些数据丢失或者不准确,所以最后算得的“最后使用时间 mEndWallTime” 小与 “开始使用时间 mStartWallTime”,那么得到的 “电池持续时间”就会小于0.

此问题是Google 原生的bug,提供解决方案如下:

BatteryHistoryChart.java line 1102 添加 mEndWallTime > mStartWallTime 的判断:

if (mTimeLabels.size() < 2 && mEndWallTime > mStartWallTime) { // Add mEndWallTime > mStartWallTime judgment
// If there are fewer than 2 time labels, then they are useless. Just
// show an axis label giving the entire duration.
mDurationString = Formatter.formatShortElapsedTime(getContext(),
mEndWallTime - mStartWallTime);
mDurationStringWidth = (int)mTextPaint.measureText(mDurationString);
if (DEBUG)
Log.d(TAG, "mStartWallTime: " + mStartWallTime
+ " mEndWallTime: " + mEndWallTime);
} else {
mDurationString = null;
mDurationStringWidth = 0;
}
 
ui->test_record->append("开始第"+ i+"次重启"); // 判定数据库是否存在数据如果有则取出数据如果没有则等待数据进入 if(datapool::instance()->isEmpty()) { QThread::msleep(1000); //停留1秒若是还没有数据则返回无数据 if(datapool::instance()->isEmpty()) { ui->test_record->append("机器未接收到有效数据或未开机"); return ; } } const int TIMEOUT_SEC = 180; // 设置3分钟超时 QDateTime startTime = QDateTime::currentDateTime(); QDateTime fixedTime; bool gga_fixed = false; bool ins_fixed = false; // 改造后的循环条件 while(QDateTime::currentDateTime().secsTo(startTime) < TIMEOUT_SEC) { QString m_data = datapool::instance()->takeData(); int check_result = paraser->check_data(m_data); if(check_result == 0) { ui->test_record->append("数据解析失败"); } else if(check_result == 1) { if(paraser->GGA.quality == 4) { if(!gga_fixed) { ui->test_record->append("[GGA已固定]"); gga_fixed = true; } } } else if(check_result == 3) { if(paraser->INS.INS_STATUS == "INS_SOLUTION_GOOD" && paraser->INS.POS_STATUS == "INS_RTKFIXED") { if(!ins_fixed) { ui->test_record->append("[INS已固定]"); ins_fixed = true; } } } // 双条件满足检测 if(gga_fixed && ins_fixed) { fixedTime = QDateTime::currentDateTime(); qint64 elapsed = startTime.msecsTo(fixedTime); ui->test_record->append("检测完毕!"); ui->test_record->append("启动时间: " + startTime.toString("hh:mm:ss.zzz")); ui->test_record->append("固定时间: " + fixedTime.toString("hh:mm:ss.zzz")); ui->test_record->append(QString("耗时: %1 毫秒").arg(elapsed)); return; // 直接退出方法 } QCoreApplication::processEvents(); // 处理事件循环 QThread::msleep(100); // 一般来说数据输出都是1hz所以沉睡0.1s防止数据没进来 }这一段代码中的从数据池中取数据也改成如果数据池中没数据就等待如果数据池中有数据就取出运算无论数据池子有没有数据三分钟没固定直接结束这一次计算输出调试信息
最新发布
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值