1. 慢充和快充提示语

\frameworks\base\packages\SystemUI\res-keyguard\values-zh-rCN

中文提示语

"正在充电"

"正在快速充电"

"正在慢速充电"

英文提示语

\frameworks\base\packages\SystemUI\res-keyguard\values

1.快充充电器充电-显示快速充电字符串

Charging rapidly

2.普通充电电器-显示充电,该同7.0及其以前特性

Charging

3.电脑端或者笔记本端显示-缓慢充电

Charging slowly

2. 原理

根据当前的最大电压和电流计算出电流速度,并进行分类为慢速充电,充电,快速充电

2.1 源代码中的原始数据

•public static final String EXTRA_MAX_CHARGING_CURRENT = “max_charging_current”;

•public static final String EXTRA_MAX_CHARGING_VOLTAGE = “max_charging_voltage”;

发送“电池广播”位置将最大电流和电压上发应用层,这里主要一些8.1以上新增的数据,7.0以前有这个数据但是framework层没有使用

frameworks/base/services/core/java/com/android/server/BatteryService.java

// 发送电池广播事件

private void sendIntentLocked() {

// Pack up the values and broadcast them to everyone

final Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);

intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY

| Intent.FLAG_RECEIVER_REPLACE_PENDING);

.......

intent.putExtra(BatteryManager.EXTRA_MAX_CHARGING_CURRENT, mBatteryProps.maxChargingCurrent);

intent.putExtra(BatteryManager.EXTRA_MAX_CHARGING_VOLTAGE, mBatteryProps.maxChargingVoltage);

2.2 adb shell 查看linux的文件节点

•获取当前的电流

adb shell cat /sys/class/power_supply/battery/current_max

adb shell cat /sys/class/power_supply/battery/current_max

30000001

•获取当前的电压

adb shell cat /sys/class/power_supply/battery/voltage_max

adb shell cat /sys/class/power_supply/battery/voltage_max

50000001

•具体源码

system/core/healthd/BatteryMonitor.cpp

#define POWER_SUPPLY_SYSFS_PATH "/sys/class/" POWER_SUPPLY_SUBSYSTEM

path.appendFormat("%s/%s/voltage_max", POWER_SUPPLY_SYSFS_PATH,mChargerNames[i].string());

2.3 上层接收广播

frameworks/base/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java

重点看 maxChargingMicroAmp 和 maxChargingMicroVolt 的算法规则

private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {

....

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

final int status = intent.getIntExtra(EXTRA_STATUS, BATTERY_STATUS_UNKNOWN);

final int plugged = intent.getIntExtra(EXTRA_PLUGGED, 0);

final int level = intent.getIntExtra(EXTRA_LEVEL, 0);

final int health = intent.getIntExtra(EXTRA_HEALTH, BATTERY_HEALTH_UNKNOWN);

final int maxChargingMicroAmp = intent.getIntExtra(EXTRA_MAX_CHARGING_CURRENT, -1);

int maxChargingMicroVolt = intent.getIntExtra(EXTRA_MAX_CHARGING_VOLTAGE, -1);

final int maxChargingMicroWatt;

if (maxChargingMicroVolt <= 0) {

maxChargingMicroVolt = DEFAULT_CHARGING_VOLTAGE_MICRO_VOLT;

}

if (maxChargingMicroAmp > 0) {

// Calculating muW = muA * muV / (10^6 mu^2 / mu); splitting up the divisor

// to maintain precision equally on both factors.

maxChargingMicroWatt = (maxChargingMicroAmp / 1000)

* (maxChargingMicroVolt / 1000);

} else {

maxChargingMicroWatt = -1;

}

final Message msg = mHandler.obtainMessage(

MSG_BATTERY_UPDATE, new BatteryStatus(status, level, plugged, health,

maxChargingMicroWatt));

mHandler.sendMessage(msg);

2.4 显示字符串

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java

事件接收

protected class BaseKeyguardCallback extends KeyguardUpdateMonitorCallback {

public static final int HIDE_DELAY_MS = 5000;

private int mLastSuccessiveErrorMessage = -1;

@Override

public void onRefreshBatteryInfo(KeyguardUpdateMonitor.BatteryStatus status) {

boolean isChargingOrFull = status.status == BatteryManager.BATTERY_STATUS_CHARGING

|| status.status == BatteryManager.BATTERY_STATUS_FULL;

boolean wasPluggedIn = mPowerPluggedIn;

mPowerPluggedIn = status.isPluggedIn() && isChargingOrFull;

mPowerCharged = status.isCharged();

mChargingWattage = status.maxChargingWattage;

mChargingSpeed = status.getChargingSpeed(mSlowThreshold, mFastThreshold);

updateIndication();

if (mDozing) {

if (!wasPluggedIn && mPowerPluggedIn) {

showTransientIndication(computePowerIndication());

hideTransientIndicationDelayed(HIDE_DELAY_MS);

} else if (wasPluggedIn && !mPowerPluggedIn) {

hideTransientIndication();

}

}

}

=====================================================================================================

public static class BatteryStatus {

public static final int CHARGING_UNKNOWN = -1;

public static final int CHARGING_SLOWLY = 0;

public static final int CHARGING_REGULAR = 1;

public static final int CHARGING_FAST = 2;

public final int status;

public final int level;

public final int plugged;

public final int health;

public final int maxChargingWattage;

public BatteryStatus(int status, int level, int plugged, int health,

int maxChargingWattage) {

this.status = status;

this.level = level;

this.plugged = plugged;

this.health = health;

this.maxChargingWattage = maxChargingWattage;

}

public final int getChargingSpeed(int slowThreshold, int fastThreshold) {

return maxChargingWattage <= 0 ? CHARGING_UNKNOWN :

maxChargingWattage < slowThreshold ? CHARGING_SLOWLY :

maxChargingWattage > fastThreshold ? CHARGING_FAST :

CHARGING_REGULAR;

}

显示字符串

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java

int chargingId;

switch (mChargingSpeed) {

case KeyguardUpdateMonitor.BatteryStatus.CHARGING_FAST:

chargingId = hasChargingTime

? R.string.keyguard_indication_charging_time_fast

: R.string.keyguard_plugged_in_charging_fast;

break;

case KeyguardUpdateMonitor.BatteryStatus.CHARGING_SLOWLY:

chargingId = hasChargingTime

? R.string.keyguard_indication_charging_time_slowly

: R.string.keyguard_plugged_in_charging_slowly;

break;

default:

chargingId = hasChargingTime

? R.string.keyguard_indication_charging_time

: R.string.keyguard_plugged_in;

break;

}

总结

以上所述是小编给大家介绍的Android 8.0 慢充和快充提示语的实现原理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

android快速充电实现_Android 8.0 慢充和快充提示语的实现原理相关推荐

  1. 英集芯IP5566带TYPE-C口3A充放快充移动电源5w无线充二合一方案SOC

    一.英集芯Ip5566无线充二合一方案SOC简介: 英集芯Ip5566是一款带TYPE-C口3A充放快充移动电源5w无线充二合一方案SOC,集成升压转换器.锂电池充电管理.电池电量指示.无线充电发射控 ...

  2. android快速充电实现_Android进入快速充电时代,如何发挥移动电源?

    友谊之舟无法扭转,但是Android皇帝时代来了!在市场的关注和用户的期望下手机充电器快充原理图,2016年上半年,小米,华为,魅族,三星和VIVO发布了新机,实现了大容量,高运行和低价的概念,轻松营 ...

  3. 手机快充技术——快充技术硬件详解

    快充技术的四大家族 高通的QuickCharge版(如QC2.0.QC3.0.QC4.0) 联发科版(Pump Express和Pump Express plus) OPPO 的VOOC技术(Supe ...

  4. android dts配置_Android 4.0系统支持DTS音效_华为手机_手机Android频道-中关村在线

    在系统方面,华为T8950荣耀+采用的是当前新机比较主流的Android 4.0系统.虽然使用的是原生Android 4.0系统,但是华为在此基础上还是做了一定的优化.从主界面来看,并没有太多的特色. ...

  5. UP9601台湾力智UPI首颗QC2.0+DC/DC+识别快充三合一车充芯片方案

    UP9601是一个高效率同步整流降压具有内部电源开关的转换器.内置低RDS(ON)开关,高效率降压转换器能够提供高达3.0A充电器输出电流接口和较宽的输入电压范围从8.0V至32V. UP9601可以 ...

  6. BC1.2协议以及QC2.0/3.0快充协议学习笔记

    BC1.2快充协议介绍 BC1.2定义 BC1.2 (Battery Charging v1.2)是USB-IF下属的BC(Battery Charging)小组制定的协议,主要用于规范电池充电的需求 ...

  7. android QQ动态tab,变化忒大了!Android版手机QQ 5.0体验

    变化忒大了!Android版手机QQ 5.0体验 出处:快科技 2014-07-28 12:02:56     作者:随心 编辑:随心[爆料] 收藏文章 内容导航: 第[01]页:[Android版手 ...

  8. 三大快充技术详解 怎样才能发挥最大功效?

    三大快充技术详解 怎样才能发挥最大功效? 2016-08-23 10:38 在锂电池技术处于瓶颈时期,快充技术在近一年内快速普及,不光是旗舰机中采用了该技术,甚至在千元入门机内也可以看到,你要没个快充 ...

  9. 手机快充芯片及其技术标准和设计原理详解

    手机快充芯片及其技术标准和设计原理详解 智能手机对于宽带无线通信.图像处理等多方面的需求导致实际耗电呈指数增长.未来5G通信带宽将比4G增加10倍,4K/8K等高清视频技术逐渐应用,CPU.GPU等运 ...

  10. 手机快充功能到底是充电头的功劳还是线的功劳?

    什么是手机快充? 快充即快速充电的简称,一般能将充电时间缩短一半甚至更多,但目前只能应用在手机领域上.简单来说,其实就是让手机充电更快一点,通过提高电压和提高电流两种方式来达到快速充电的目的. 手机快 ...

最新文章

  1. 数据挖掘技术在出行体验上的应用!
  2. EBS   常见的AD命令
  3. Design verification经验总结
  4. 【火炉炼AI】机器学习007-用随机森林构建共享单车需求预测模型
  5. 居然之家忍“刮骨疗伤”之痛拥抱新零售
  6. 6.LibSVM核函数
  7. Vue——定义全局工具类
  8. 验证哥德巴赫猜想:任何一个大于6的偶数均可表示为2个素数之和
  9. 手工搭建APACHE服务
  10. CF980D Perfect Groups
  11. Oracle 10g、11g :RAC关闭、启动、重启步骤
  12. Android日志[进阶篇]五-阅读错误报告
  13. VS Code编译C/C++
  14. Java可变引用,Java – 对可变对象的易失性引用 – 对对象的字段的更新对所有线程都是可见的...
  15. pythonlist排序算法_Python版常见的排序算法
  16. 52)PHP,加了单例模式的数据库代码
  17. mongodb和mysql创建表_MongoDB 数据库创建删除、表(集合)
  18. 三个锦囊:剖析 5G 安全难题
  19. 关于航模的几点总结积累
  20. 平板电脑刷机加供电系统改造

热门文章

  1. DB2 DatabaseMetadata类的使用
  2. SNIP物体检测算法理解
  3. jenkins配置邮件通知
  4. nginx location的命中过程
  5. HTML基础整理(From表单)
  6. 汇编语言32位加减乘除运算题
  7. 智能优化算法:猫群优化算法-附代码
  8. Ubuntu 18.04 安装 CUDA
  9. 【pytorch】梯度爆炸/消失解决办法
  10. Matlab 绘制箱线图