安卓12-电池过热弹框提示
安卓12-电池过热弹框提示
·
--- a/frameworks/base/services/core/java/com/android/server/BatteryService.java
+++ b/frameworks/base/services/core/java/com/android/server/BatteryService.java
@@ -516,7 +516,7 @@ public final class BatteryService extends SystemService {
}
shutdownIfNoPowerLocked();
- shutdownIfOverTempLocked();
+
if (force || (mHealthInfo.batteryStatus != mLastBatteryStatus ||
mHealthInfo.batteryHealth != mLastBatteryHealth ||
@@ -617,17 +617,49 @@ public final class BatteryService extends SystemService {
}
}
+
+ tmp_new = mHealthInfo.batteryTemperature;
+ if(tmp_new > tmp_old){
+ if(tmp_old < 620 && tmp_new >= 620){
+ final Intent statusIntent = new Intent("PNW.clickedThermalShutdownWarning");
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mContext.sendBroadcastAsUser(statusIntent, UserHandle.ALL);
+ }
+ });
+ mHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ shutdownIfOverTempLocked();
+ }
+ },3000);
+ }else if(tmp_old < 575 && tmp_new >= 575){
+ final Intent statusIntent = new Intent("PNW.clickedTempWarning");
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mContext.sendBroadcastAsUser(statusIntent, UserHandle.ALL);
+ }
+ });
+ }else if(tmp_old < 515 && tmp_new >= 515){
+ final Intent statusIntent = new Intent("PNW.clickedWarmTempWarning");
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mContext.sendBroadcastAsUser(statusIntent, UserHandle.ALL);
+ }
+ });
+ }
+ }
+ tmp_old = tmp_new;
mSequence++;
// Separate broadcast is sent for power connected / not connected
@@ -713,6 +745,9 @@ public final class BatteryService extends SystemService {
}
}
+ private int tmp_new = 0;
+ private int tmp_old = 0;
+
private void sendBatteryChangedIntentLocked() {
// Pack up the values and broadcast them to everyone
final Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
以上是针对不同电池温度,做的不同弹框显示,最高温直接关机;
下面是针对主板温度状态报警;
hardware/interfaces/health/1.0/types.hal
enum BatteryHealth : int32_t {
UNKNOWN = 1,
GOOD = 2,
OVERHEAT = 3,
DEAD = 4,
OVER_VOLTAGE = 5,
/**
* Battery experienced an unknown/unspecifid failure.
*/
UNSPECIFIED_FAILURE = 6,
COLD = 7,
OVERTMP = 8,
};
system/core/healthd/BatteryMonitor.cpp
static SysfsStringEnumMap<BatteryHealth> batteryHealthMap[] = {
{"Unknown", BatteryHealth::UNKNOWN},
{"Good", BatteryHealth::GOOD},
{"Overheat", BatteryHealth::OVERHEAT},
{"Dead", BatteryHealth::DEAD},
{"Over voltage", BatteryHealth::OVER_VOLTAGE},
{"Unspecified failure", BatteryHealth::UNSPECIFIED_FAILURE},
{"Cold", BatteryHealth::COLD},
// battery health values from JEITA spec
{"Warm", BatteryHealth::GOOD},
{"Cool", BatteryHealth::GOOD},
{"Hot", BatteryHealth::OVERTMP},
{NULL, BatteryHealth::UNKNOWN},
};
hal文件修改后,执行:
hidl-gen -L hash -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport android.hardware.health@1.0::types
生成新的hash值;
将新的hash值写入hardware/interfaces/current.txt
bd173fc38f70775be019d6f233061e26e6b9d7c06092a3ed4b42ef0c86f17c49 android.hardware.health@1.0::types
frameworks/base/services/core/java/com/android/server/BatteryService.java
} else if (force && mHealthInfo.batteryLevel >= mLowBatteryWarningLevel) {
// If being forced, the previous state doesn't matter, we will just
// absolutely check to see if we are now above the warning level.
mBatteryLevelLow = false;
}
}
if (mHealthInfo.batteryHealth ==8 ) {
Log.d(TAG, "processValuesLocked<> mHealthInfo.batteryHealth:" + mHealthInfo.batteryHealth);
final Intent statusIntent = new Intent("PNW.clickedTempWarning");
mHandler.post(new Runnable() {
@Override
public void run() {
mContext.sendBroadcastAsUser(statusIntent, UserHandle.ALL);
}
});
}
mSequence++;
更多推荐
已为社区贡献7条内容
所有评论(0)