Android 12.0 电池温度 < 0℃ 或 电池温度 > 60℃ 时弹出提示语,电池温度 < -25℃ 或 电池温度 > 65℃ 时弹出提示语并关机

Android 12.0 电池温度 < 0℃ 或 电池温度 > 60℃ 时弹出提示语,电池温度 < -25℃ 或 电池温度 > 65℃ 时弹出提示语并关机
最近做到项目需求需要给设备电池增加高低温提醒,具体修改点如下:

在/vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/strings.xml中增加:

    <string name="title_battery_over_temperature_shutdown">"Over Battery Temperature"</string>
    <string name="title_charger_over_temperature">"Over Battery Temperature"</string>
    <string name="title_charger_low_temperature">"Low Battery Temperature"</string>
    <string name="title_battery_low_temperature_shutdown">"Low Battery Temperature"</string>
    <string name="title_battery_low_level">"Low Battery Level"</string>
    <string name="title_battery_over_temperature">"Over Battery Temperature"</string>
    <string name="title_battery_low_temperature">"Low Battery Temperature"</string>

    <string name="msg_battery_over_temperature_shutdown">"Your battery is over temperature.\nYour phone will shut down after 30 \nseconds."</string>
    <string name="msg_charger_over_temperature">"Your battery is over temperature.\nCharging has been suspended."</string>
    <string name="msg_charger_low_temperature">"Your battery temperature is too low.\nCharging has been suspended."</string>
    <string name="msg_battery_low_temperature_shutdown">"Your battery temperature is too low.\nYour phone will shut down after 30 \nseconds."</string>
    <string name="msg_battery_low_level">"Your battery is low in power and will shut down after 30 seconds."</string>
    <string name="msg_battery_over_temperature">"Your battery is over temperature."</string>
    <string name="msg_battery_low_temperature">"Your battery is low temperature"</string>

在/vendor/mediatek/proprietary/packages/apps/SystemUI/res/layout/下新建布局文件:
battery_warning.xml:

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2008 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
          http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="4dp"
        android:gravity="center_horizontal">

    <!-- Message to show to use. -->
    <TextView android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center"
        android:paddingTop="4dp" android:paddingBottom="4dp" />
    <LinearLayout android:id="@+id/inner_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingTop="4dp" android:paddingBottom="4dp">
    </LinearLayout>
    <!-- Alert dialog style buttons along the bottom. -->
    <LinearLayout style="?android:attr/buttonBarStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:measureWithLargestChild="true"
        android:orientation="vertical">
        <Button style="?android:attr/buttonBarButtonStyle" android:id="@+id/add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:layout_marginRight="10dp"/>
    </LinearLayout>
</LinearLayout>

custom_title_1.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView android:id="@+id/left_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"/>
</LinearLayout>

在/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/power下新建java文件:
BatteryTemperatureActivity.java:

package com.android.systemui.power;

import com.android.systemui.R;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.UserHandle;
import android.util.Log;
import android.view.View.OnClickListener;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ImageView;
import android.widget.TextView;


public class BatteryTemperatureActivity extends Activity {
    private static final String TAG = "BatteryTemperatureActivity";
    private static final String SHARED_PREFERENCES_NAME = "battery_warning_settings";
    protected static final String KEY_TYPE = "type";
    private Handler mHandler;
    private Ringtone mRingtone;
    private int mType;
    private int mPlugType;
    private int mBatteryLevel;

    private static final int BATTERY_OVER_TEMPERATURE_SHUTDOWN_TYPE = 0;
    private static final int CHARGER_OVER_TEMPERATURE_TYPE = 1;
    private static final int CHARGER_LOW_TEMPERATURE_TYPE = 2;
    private static final int BATTERY_LOW_TEMPERATURE_SHUTDOWN_TYPE = 3;
    private static final int BATTERY_LOW_LEVEL = 4;
    private static final int BATTERY_OVER_TEMPERATURE_TYPE = 5;
    private static final int BATTERY_LOW_TEMPERATURE_TYPE = 6;

    static final int[] shutdownTitle = new int[] {
            R.string.title_battery_over_temperature_shutdown,
            R.string.title_charger_over_temperature,
            R.string.title_charger_low_temperature,
            R.string.title_battery_low_temperature_shutdown,
            R.string.title_battery_low_level,
            R.string.title_battery_over_temperature,
            R.string.title_battery_low_temperature,};
    private static final int[] shutdownMsg = new int[] {
            R.string.msg_battery_over_temperature_shutdown,
            R.string.msg_charger_over_temperature,
            R.string.msg_charger_low_temperature,
            R.string.msg_battery_low_temperature_shutdown,
            R.string.msg_battery_low_level,
            R.string.msg_battery_over_temperature,
            R.string.msg_battery_low_temperature,};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setFinishOnTouchOutside(false);
        setContentView(R.layout.battery_warning);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
                R.layout.custom_title_1);

        mHandler = new Handler();

        Intent intent = getIntent();
        mType = intent.getIntExtra("TemperatueType", -1);
        mPlugType = intent.getIntExtra("PlugType", 0);
        mBatteryLevel = intent.getIntExtra("BatteryLevel",-1);
        Log.d("nowtemp", "mType is " + mType);
        Log.d("nowtemp", "PlugType is " + mPlugType);
        Log.d("nowtemp", "BatteryLevel is " + mBatteryLevel);
        if (mType == BATTERY_LOW_TEMPERATURE_SHUTDOWN_TYPE
                    || mType == BATTERY_OVER_TEMPERATURE_SHUTDOWN_TYPE) {
            showWarningDialog(mType);
            //shutdown
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
                    intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    Log.d("nowtemp", "shutdown is ok");
                    BatteryTemperatureActivity.this.startActivityAsUser(intent, UserHandle.CURRENT);
                }
            },30000);
            ///
        } else if (mType == CHARGER_LOW_TEMPERATURE_TYPE || mType == CHARGER_OVER_TEMPERATURE_TYPE) {
            if(mPlugType != 0) {
                showWarningDialog(mType);
            } else {
                finish();
            }
        } else if (mType == BATTERY_OVER_TEMPERATURE_TYPE || mType == BATTERY_LOW_TEMPERATURE_TYPE) {
            if(mPlugType == 0) {
                showWarningDialog(mType);
            } else {
                finish();
            }
        } else {
            finish();
        }
    }

    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "receive ACTION_BATTERY_CHANGED broadcast, finish");
    }

    private void showWarningDialog(int type) {
        TextView textView = (TextView) findViewById(R.id.left_text);
        TextView textView2 = (TextView) findViewById(R.id.text);

        textView.setTextSize(20);
        textView2.setTextSize(16);
        textView.setText(getString(shutdownTitle[mType]));
        textView2.setText(getString(shutdownMsg[mType]));

        LinearLayout layout = (LinearLayout)findViewById(R.id.inner_content);

        Button button = (Button)findViewById(R.id.add);
        button.setText("OK");
        button.setOnClickListener(mDismissContentListener);


    }
    private OnClickListener mDismissContentListener = new OnClickListener() {
        public void onClick(View v) {
            finish();
        }
    };



}

在/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/power/PowerUI.java的

else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {

中增加

                int type = -1;
                int nowTemp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
                int mPlugType = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
                int tBatteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
                Slog.d("nowtemp", "powerUI nowtemp is "+nowTemp);
                Slog.d("nowtemp", "powerUI BatteryLevel is "+tBatteryLevel);
                if((mPlugType ==0) && (nowTemp >= 600 || nowTemp < -100)){
                    if (nowTemp >= 650) {
                        type = 0;
                    } else if (nowTemp >= 600) {
                        type = 5;
                    } else if (-250 < nowTemp && nowTemp < -99) {
                        type = 6;
                    } else if (nowTemp <= -250) {
                        type = 3;
                    }
                    Intent tempIntent = new Intent();
                    tempIntent.setClass(mContext, BatteryTemperatureActivity.class);
                    tempIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_CLEAR_TOP
                        | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                    tempIntent.putExtra("TemperatueType", type);
                    tempIntent.putExtra("PlugType", mPlugType);
                    tempIntent.putExtra("BatteryLevel", tBatteryLevel);
                    mContext.startActivity(tempIntent);
                } else if ((mPlugType != 0) && (nowTemp >= 550 || nowTemp <= 0)) {
                    if (nowTemp >= 600) {
                        type = 1;
                    } else if (nowTemp <= 0) {
                        type = 2;
                    }
                    Intent tempIntent = new Intent();
                    tempIntent.setClass(mContext, BatteryTemperatureActivity.class);
                    tempIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_CLEAR_TOP
                        | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                    tempIntent.putExtra("TemperatueType", type);
                    tempIntent.putExtra("PlugType", mPlugType);
                    tempIntent.putExtra("BatteryLevel", tBatteryLevel);
                    mContext.startActivity(tempIntent);
                }

在/vendor/mediatek/proprietary/packages/apps/SystemUI/AndroidManifest.xml中增加:

        <activity android:name=".power.BatteryTemperatureActivity"
            android:process=":nowtemp"
            android:excludeFromRecents="true"
            android:launchMode="singleTop"
            android:theme="@*android:style/Theme.Material.Light.Dialog.Alert">
        </activity>

重新编译验证,修改生效,设备电池已增加高低温提醒

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
该项目可用于 CirKits太阳能电路套件。 介绍该电路用于测量12V(标称)铅酸蓄电池系统上的电压。它专门设计用于太阳能系统,但总体而言可用于汽车或其他12V系统。 铅酸电池的工作寿命通常在11-15伏特的电压范围内。该仪表电路设计用于在模拟仪表运动中显示10-15V的电压范围,可用于显示从空到满的电池充电状态。 产品规格测量电压:10-15伏直流 电路电流:在15伏直流输入时为9.2mA 理论输入电压通过10欧姆电阻和78L08调节器输入端的0.1uF电容从瞬态电压尖峰滤波。1 Amp系列保险丝和Transzorb保护电路免受短路和过压条件的影响。 78L08电压调节器通过10-15V输入电压范围为仪表电路提供恒定的8V直流电源。双运算放大器为电源轨输入提供0V和8V。较低的运算放大器设置为缓冲级,以提供4V虚拟接地参考电压。虚拟地面用作仪表的电流接收器,并作为另一个运算放大器的参考点。 一个78L08调节器可能是一个困难的部分找到,一个很好的替代将是LM317L可调稳压器电路设置为8V。其他双运放在这个电路中应该很好,1458是一个很好的替代品,如果考虑掉电,可以使用超低功耗双运算放大器。 上运放被配置为具有可调增益的电压求和电路。增益由100K反馈电阻控制。增益控制调节电压范围内的仪表灵敏度。测量电压通过100K / 47K分压器进入上运算放大器的+输入。偏移控制产生第二个+输入电压,通过68K电阻与测得的电压相加。此控制的调整可使仪表位置上下移动,当将最小测量电压(10V)施加到电路时,用于将仪表移动设置为0。显示的仪表具有灵敏的50uA全刻度读数,更常见的1ma米可以通过将47K系列电阻值降低到2.5K来使用。 施工钻了一个大约1“x3”的穿孔电路板材料,其中有两个孔,以便板可以安装在模拟仪表的两个端子上。零件组装在多孔板上并与点对点布线连接在一起。在裸线上使用聚四氟乙烯绝缘材料制成横板连接。将两个电池引线绞合在一起,然后用线圈固定到电路板的边缘以防止移动。 该仪器安装在4“x4”金属板上,切割并钻以适应标准的电气开关盒。盒子应该足够深,以便仪表和伴随的电路板不要碰到盒子的背面。仪表盒和电池盒之间的接线穿过金属导管。 对准将此电路与数字电压表并联连接以进行对准。两个仪表应连接到能够在10-15V直流范围内工作的稳定的可变电压电源。将输入电压设置为12.5V,将增益控制设置为中途,并调整偏移控制,直到仪表读取其范围的中心。在观看数字仪表时,将输入电压移至12.0V。观察模拟仪表位置。将输入电压调整到13.0V,再次观察仪表位置。如果仪表在表盘上摆动超过1V,则减小增益控制。如果它减少,增加控制。 重复此操作,直到仪表精确测量1V的变化。将输入电压设置为12.5V,调整偏移控制,使仪表显示12.5V。可能需要交替调整两个控制,以使仪表精确对准。在10.0V和15.0V时观察仪表读数,调整控制,直到读数达到准确的终点电压。 使用将电路连接到12V电池上,观察电压。仪表消耗的电流足够小,除了最小的电池之外,所有电流都可以连续使用。
以下是Python脚本程序,实现了摄氏温度到华氏温度的转换,并生成了-100到100每1的对照表: ```python def celsius_to_fahrenheit(celsius): return celsius * 1.8 + 32 print("Celsius\tFahrenheit") for celsius in range(-100, 101): fahrenheit = celsius_to_fahrenheit(celsius) print("{:.1f}\t{:.1f}".format(celsius, fahrenheit)) ``` 运行结果如下: ``` Celsius Fahrenheit -100.0 -148.0 -99.0 -146.2 -98.0 -144.4 -97.0 -142.6 -96.0 -140.8 -95.0 -139.0 -94.0 -137.2 -93.0 -135.4 -92.0 -133.6 -91.0 -131.8 -90.0 -130.0 -89.0 -128.2 -88.0 -126.4 -87.0 -124.6 -86.0 -122.8 -85.0 -121.0 -84.0 -119.2 -83.0 -117.4 -82.0 -115.6 -81.0 -113.8 -80.0 -112.0 -79.0 -110.2 -78.0 -108.4 -77.0 -106.6 -76.0 -104.8 -75.0 -103.0 -74.0 -101.2 -73.0 -99.4 -72.0 -97.6 -71.0 -95.8 -70.0 -94.0 -69.0 -92.2 -68.0 -90.4 -67.0 -88.6 -66.0 -86.8 -65.0 -85.0 -64.0 -83.2 -63.0 -81.4 -62.0 -79.6 -61.0 -77.8 -60.0 -76.0 -59.0 -74.2 -58.0 -72.4 -57.0 -70.6 -56.0 -68.8 -55.0 -67.0 -54.0 -65.2 -53.0 -63.4 -52.0 -61.6 -51.0 -59.8 -50.0 -58.0 -49.0 -56.2 -48.0 -54.4 -47.0 -52.6 -46.0 -50.8 -45.0 -49.0 -44.0 -47.2 -43.0 -45.4 -42.0 -43.6 -41.0 -41.8 -40.0 -40.0 -39.0 -38.2 -38.0 -36.4 -37.0 -34.6 -36.0 -32.8 -35.0 -31.0 -34.0 -29.2 -33.0 -27.4 -32.0 -25.6 -31.0 -23.8 -30.0 -22.0 -29.0 -20.2 -28.0 -18.4 -27.0 -16.6 -26.0 -14.8 -25.0 -13.0 -24.0 -11.2 -23.0 -9.4 -22.0 -7.6 -21.0 -5.8 -20.0 -4.0 -19.0 -2.2 -18.0 -0.4 -17.0 1.4 -16.0 3.2 -15.0 5.0 -14.0 6.8 -13.0 8.6 -12.0 10.4 -11.0 12.2 -10.0 14.0 -9.0 15.8 -8.0 17.6 -7.0 19.4 -6.0 21.2 -5.0 23.0 -4.0 24.8 -3.0 26.6 -2.0 28.4 -1.0 30.2 0.0 32.0 1.0 33.8 2.0 35.6 3.0 37.4 4.0 39.2 5.0 41.0 6.0 42.8 7.0 44.6 8.0 46.4 9.0 48.2 10.0 50.0 11.0 51.8 12.0 53.6 13.0 55.4 14.0 57.2 15.0 59.0 16.0 60.8 17.0 62.6 18.0 64.4 19.0 66.2 20.0 68.0 21.0 69.8 22.0 71.6 23.0 73.4 24.0 75.2 25.0 77.0 26.0 78.8 27.0 80.6 28.0 82.4 29.0 84.2 30.0 86.0 31.0 87.8 32.0 89.6 33.0 91.4 34.0 93.2 35.0 95.0 36.0 96.8 37.0 98.6 38.0 100.4 39.0 102.2 40.0 104.0 41.0 105.8 42.0 107.6 43.0 109.4 44.0 111.2 45.0 113.0 46.0 114.8 47.0 116.6 48.0 118.4 49.0 120.2 50.0 122.0 51.0 123.8 52.0 125.6 53.0 127.4 54.0 129.2 55.0 131.0 56.0 132.8 57.0 134.6 58.0 136.4 59.0 138.2 60.0 140.0 61.0 141.8 62.0 143.6 63.0 145.4 64.0 147.2 65.0 149.0 66.0 150.8 67.0 152.6 68.0 154.4 69.0 156.2 70.0 158.0 71.0 159.8 72.0 161.6 73.0 163.4 74.0 165.2 75.0 167.0 76.0 168.8 77.0 170.6 78.0 172.4 79.0 174.2 80.0 176.0 81.0 177.8 82.0 179.6 83.0 181.4 84.0 183.2 85.0 185.0 86.0 186.8 87.0 188.6 88.0 190.4 89.0 192.2 90.0 194.0 91.0 195.8 92.0 197.6 93.0 199.4 94.0 201.2 95.0 203.0 96.0 204.8 97.0 206.6 98.0 208.4 99.0 210.2 100.0 212.0 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeffries_C

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值