--- 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++;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐