一、根据相似案例移殖代码-过程

1:在A12部分开宏

涉及修改三处:

(1):文件路径:device…\ProjectConfig.mk

添加开宏条件:

MTK_TEMPERATURE_WARNING = yes
(2):文件路径:device\common\common.mk

添加宏:

ifeq ($(strip $(MTK_TEMPERATURE_WARNING)), yes)PRODUCT_PROPERTY_OVERRIDES += odm.agnfun.temperature_warning=true
endif
(3):文件路径:device\mediatek\sepolicy\basic\non_plat\property_contexts

添加属性:

odm.mtk.temperature_warning u:object_r:vendor_mtk_default_prop:s0
2:在A13部分
(1)编写BatteryTemperatureWarning.java代码

并放在该目录下:vendor\mediatek\proprietary\packages\apps\SystemUI\src\com\mediatek\systemui\

BatteryTemperatureWarning.java代码里主要编写了在充电电池处于不同温度情况下各自执行什么操作,操作具体包括提示、停止充电、关机等,对应的这些操作也要分别定义,写出方法,以下是在温度处于60度时的关键代码:

private SystemUIDialog mCharging60Dialog;
private Runnable mCharging60DialogShow = new Runnable() {@Override public void run() {if (!mCharging60Dialog.isShowing()) {mCharging60Dialog.show();}mHandler.postDelayed(mCharging60DialogShow, 30000);}
};
public void updateCharging60Dialog(int level, boolean plugged) {if (mCharging60Dialog == null) {final SystemUIDialog d = new SystemUIDialog(mContext);d.setIconAttribute(android.R.attr.alertDialogIcon);d.setTitle(R.string.battery_warning_title);d.setMessage(plugged ? R.string.battery_warning_level_5 : R.string.battery_warning_level_5_noplugged);d.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {@Override public void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubLog.d(TAG, "updateCharging60Dialog click ok");}});d.setShowForAllUsers(true);d.setOnDismissListener(new OnDismissListener() {@Override public void onDismiss(DialogInterface dialog) {Log.d(TAG, "updateCharging60Dialog onDismiss");}});mCharging60Dialog = d;mCharging60Dialog.show();}if (plugged) {mHandler.postDelayed(mCharging60DialogShow, 0);}else {RingtoneManager rm = new RingtoneManager(mContext);Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);Ringtone mRingtone = RingtoneManager.getRingtone(mContext, uri);mRingtone.play();if (!mCharging60Dialog.isShowing()) {mCharging60Dialog.show();}mHandler.postDelayed(mShutdownRunnable, 300000);mHandler.removeCallbacks(mCharging60DialogShow);}if (level != 5) {mHandler.removeCallbacks(mCharging60DialogShow);}
}

其他温度下的代码编写参考上面关键代码
60度所处温度级别(level)为5,关于温度级别的判断逻辑以及执行提示的方法在PowerUI.java上编辑

(2)修改SystemUI.java代码

PowerUI.java文件路径:
vendor\mediatek\proprietary\packages\apps\SystemUI\src\com\android\systemui\power\PowerUI.java
在SystemUI.java中主要是增加信息提示模块,
用于监测电池的温度并根据不同的温度等级执行不同的操作,包括弹出不同的温度警告对话框、停止或恢复充电等。
大体增添的内容如下:

  1. import com.mediatek.systemui.BatteryTemperatureWarning;该类定义了各种电量温度警告的提醒对话框,并根据不同的温度等级执行不同的操作。
  2. import android.os.SystemProperties;该类用于读取系统属性值,比如用来判断是否需要打开电池温度检测。
  3. @VisibleForTesting int mBatteryTemperature = 35;表示电池温度,初始值为35。
  4. private boolean isStopCharge = false;用于标记是否停止充电,初始值为false。
  5. private BatteryTemperatureWarning mBatteryTemperatureWarning;用于与电量温度警告对话框交互。
  6. mBatteryTemperatureWarning = new BatteryTemperatureWarning(mContext, mHandler);
    创建对象,并传入上下文和消息处理器。
  7. public int batteryTemperatureJudgment(int temperature){...}
    定义方法,用于判断电池温度等级,并返回对应的等级值。
  8. public void executeTemperatureWarning(int level, boolean plugged) {...}
    定义方法,根据电池温度等级和是否充电,选择不同的温度警告对话框,并执行相应操作。
  9. final int oldBatteryTemperature = mBatteryTemperature;...读取当前电池温度值,计算电池温度变化量,
    调用executeTemperatureWarning方法。
    其中关键逻辑部分在于调用executeTemperatureWarning方法,关键代码如下:
        public void executeTemperatureWarning(int level, boolean plugged) {if (0 == level) {//Normal temperature or temperature has not changed,then return;return;}if (DEBUG){Slog.d(TAG, "executeTemperatureWarning : level = " + level + ", plugged = " + plugged + ",isStopCharge=" + isStopCharge);}if (5 == level && !isStopCharge) {//Battery over temperature, pelese remove  charger!if (DEBUG){Slog.d(TAG,"Battery temperature level = 5");}//isStopCharge = true;//mPowerManager.stopCharge(isStopCharge);mBatteryTemperatureWarning.updateCharging60Dialog(level,plugged);} else if (6 == level) {//Battery over temperature, phone will shutdown !...} else if (4 == level) {//Resume charging...} else if (level <= 3 && plugged && !isStopCharge) {//Battery's temperature is too low, Stop charging!...} else if (level == 3 && !plugged && !isStopCharge) {//Battery's temperature is too low, Stop charging!...} else if (2 == level && !plugged) {//The pop-up indicates the temperature is too low...} else if (1 == level && !plugged) {//Battery over temperature, phone will shutdown in 15s!  ...}

二、编译、打包、刷机测试-过程

编译、打包、刷机测试的完整步骤与昨日已经总结完成:第二天分析-二、编译、打包、刷机测试-过程

三、检验测试结果对修改的代码进行逻辑分析

测试结果:模拟电池温度达60度时手机弹出温度过热提示框,达65度时手机进入关机,但并未出现温度过热提示框

四、进一步修改、验证-过程

1:进一步修改:

将60度updateCharging60Dialog方法的代码同理移植到65度updateCharging65Dialog中,同时注意调用关机方法不要漏掉,
关键代码如下:

 public void updateCharging65Dialog(int level, boolean plugged) {if (mCharging65Dialog == null) {final SystemUIDialog d = new SystemUIDialog(mContext);d.setIconAttribute(android.R.attr.alertDialogIcon);d.setTitle(R.string.battery_warning_title);d.setMessage(plugged ? R.string.battery_warning_level_5:R.string.battery_warning_level_5_noplugged);d.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubLog.d(TAG,"updateCharging65Dialog click ok");}});d.setShowForAllUsers(true);d.setOnDismissListener(new OnDismissListener() {@Overridepublic void onDismiss(DialogInterface dialog) {Log.d(TAG,"updateCharging65Dialog onDismiss");}});mCharging65Dialog = d;mCharging65Dialog.show();}mHandler.postDelayed(mShutdownRunnable, 0);}
2:进一步验证

代码保存、编译、打包、刷机测试
测试结果:模拟电池温度达60度时手机弹出温度过热提示框,达65度时出现温度过热提示框手机进入关机。
目标需求已经完成。
再打包软件发送测试申请,进行最后的验证。。。

Android-MTK平台功能需求解决:客户电池NTC功能(高低温报警功能)--第3天(已解决)相关推荐

  1. android mtk平台,总结自己在android MTK平台的学习

    受老罗的影响,由于本人还是菜鸟,不能像老罗一样重头开始研究整个系统,决定从就近的工作开始,从android MTK 的驱动-->中间层-->应用层,一步一步研究. 一边看书,一边搜集网上的 ...

  2. 【GPS】Android O平台如何设置SUPL地址,以及GPS三个配置文件的优先级分析

    Android O平台如何设置SUPL地址? SUPL地址: SUPL_HOST   SUPL_PORT 问题描述: Android O 以前的版本, SUPL地址是通过system/gps.conf ...

  3. android MTK平台驱动设置

    1. LCD 1.1怎样新建一个LCD驱动 LCD模组主要包括LCD显示屏和驱动IC.比如LF040DNYB16a模组的驱动IC型号为NT35510.要在MT577平台上新建这个lcd的驱动,步骤如下 ...

  4. Android MTK平台最完备的开机动画修改教程

    修改手机的开机动画不是什么难事儿. 但修改一款很冷门的"山寨机",就不太好修改第一屏了. 手机是MTK的一款手机,虽然比较贵(价格超过三星Note3),但在我看来跟山寨机木有啥区别 ...

  5. android mtk平台的fm停止搜索,【MTK平台,手机工程模式知识及方法详解】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 mtk手机工程模式下的几个应用 "MP3.MP4播放不论是用耳机还是机内喇叭,音量关到最小仍然觉得大",解决方法如下: 1)打开数字键 ...

  6. android写入imei,Android MTK平台 实现用命令写手机IMEI号(转)

    涉及内容: 1. 获取Phone对象: 2. AT command: 3.Java正则表达式:实现思路: 从拨号盘输入含有IMEI号的字串,提取字串中的IMEI,通过Intent,将IMEI号传入写I ...

  7. android mtk平台,android mtk平台默认输入法

    [Description] 如何修改默认输入法? [Solution] 一.适用于ICS(Android V4.0)之前的版本: 1. 安装需要用的默认输入法(.apk)到system/app 2. ...

  8. MTK平台修改Android动画,Android MTK平台修改开关机动画和开机logo

    转载请注明出处:http://blog.csdn.net/u011479494/article/details/50682089 一.修改开机logo 由于我的机器分辨率为540*960 替换:med ...

  9. Android MTK平台修改开关机动画和开机logo

    转载请注明出处:http://blog.csdn.net/u011479494/article/details/50682089 一.修改开机logo 由于我的机器分辨率为540*960 替换:med ...

  10. Windows/Android/iOS平台H265编码视频播放器EasyPlayerPro支持高码率视频播放和D3D画面旋转代码参考

    EasyPlayerPro是一款全功能的流媒体播放器,支持RTSP.RTMP.HTTP.HLS.UDP.RTP.File等多种流媒体协议播放.支持本地文件播放,支持本地抓拍.本地录像.播放旋转.多屏播 ...

最新文章

  1. clickhouse 基础知识
  2. [YTU]_2635(P4 游戏中的Human角色)
  3. Spring-bean之间的关系
  4. thinkpad密码忘记
  5. (软件工程复习核心重点)第四章总体设计-第一节:总体设计基本概念和设计过程
  6. ajax servlet怎么接收_【百战程序员从开始到植发】之AJAX
  7. 阿里云keepalived的虚拟ip怎么让外网访问_Keepalived双机热备
  8. 外贸客户如何跟进?外贸客户类型及跟进策略
  9. 阿尔法贝塔剪枝——中国象棋人机对战
  10. 80行Python代码搞定全国区划代码
  11. 【数据异常校验】T检验或T测试(T-test)
  12. 从阿里云下载centos的步骤
  13. 数学黑洞6174问题
  14. 基于 USB PD DRP的充电宝原理解析
  15. 专访美女程序媛刘晶:一个人的成功是做加法,团队的成功则是做乘法
  16. 2016 最新开发者账号 · 邓白氏申请申请流
  17. 电容或电感的电压_电源系列之BUCK电源电感的工作模式
  18. S7-200 SMART V2.7安装包下载链接及安装教程
  19. 双 JK 触发器 74LS112 逻辑功能。真值表_必看好文-MOS管构成的基本门逻辑电路解析...
  20. 网页中商业产品展示页制作方法探讨

热门文章

  1. MySQL内核月报 2015.01-MySQL · 捉虫动态· 设置 gtid_purged 破坏AUTO_POSITION复制协议
  2. java上传文件时404,jspSmartUpload实现文件上传 代码没有提示异常但是运行时会出现404异常 The requested resource is not avai...
  3. 2018年4月计算机组成原理试题,2018年4月自考计算机组成原理02318试题及答案.doc...
  4. 20_数组的常见操作
  5. 黑龙江生物科技职业学院计算机华为学院好吗,黑龙江生物科技职业学院怎么样好不好(王牌专业+网友评价)...
  6. 软考信息系统项目管理师全真模拟题(含解析)
  7. 话题 | 男人月薪多少,才能养活一个女朋友?
  8. vue项目打包后一片空白
  9. ARM处理器异常返回地址
  10. Chrome浏览器:设置网站允许运行Flash