android快速充电实现_Android 8.0 慢充和快充提示语的实现原理
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 慢充和快充提示语的实现原理相关推荐
- 英集芯IP5566带TYPE-C口3A充放快充移动电源5w无线充二合一方案SOC
一.英集芯Ip5566无线充二合一方案SOC简介: 英集芯Ip5566是一款带TYPE-C口3A充放快充移动电源5w无线充二合一方案SOC,集成升压转换器.锂电池充电管理.电池电量指示.无线充电发射控 ...
- android快速充电实现_Android进入快速充电时代,如何发挥移动电源?
友谊之舟无法扭转,但是Android皇帝时代来了!在市场的关注和用户的期望下手机充电器快充原理图,2016年上半年,小米,华为,魅族,三星和VIVO发布了新机,实现了大容量,高运行和低价的概念,轻松营 ...
- 手机快充技术——快充技术硬件详解
快充技术的四大家族 高通的QuickCharge版(如QC2.0.QC3.0.QC4.0) 联发科版(Pump Express和Pump Express plus) OPPO 的VOOC技术(Supe ...
- android dts配置_Android 4.0系统支持DTS音效_华为手机_手机Android频道-中关村在线
在系统方面,华为T8950荣耀+采用的是当前新机比较主流的Android 4.0系统.虽然使用的是原生Android 4.0系统,但是华为在此基础上还是做了一定的优化.从主界面来看,并没有太多的特色. ...
- UP9601台湾力智UPI首颗QC2.0+DC/DC+识别快充三合一车充芯片方案
UP9601是一个高效率同步整流降压具有内部电源开关的转换器.内置低RDS(ON)开关,高效率降压转换器能够提供高达3.0A充电器输出电流接口和较宽的输入电压范围从8.0V至32V. UP9601可以 ...
- BC1.2协议以及QC2.0/3.0快充协议学习笔记
BC1.2快充协议介绍 BC1.2定义 BC1.2 (Battery Charging v1.2)是USB-IF下属的BC(Battery Charging)小组制定的协议,主要用于规范电池充电的需求 ...
- android QQ动态tab,变化忒大了!Android版手机QQ 5.0体验
变化忒大了!Android版手机QQ 5.0体验 出处:快科技 2014-07-28 12:02:56 作者:随心 编辑:随心[爆料] 收藏文章 内容导航: 第[01]页:[Android版手 ...
- 三大快充技术详解 怎样才能发挥最大功效?
三大快充技术详解 怎样才能发挥最大功效? 2016-08-23 10:38 在锂电池技术处于瓶颈时期,快充技术在近一年内快速普及,不光是旗舰机中采用了该技术,甚至在千元入门机内也可以看到,你要没个快充 ...
- 手机快充芯片及其技术标准和设计原理详解
手机快充芯片及其技术标准和设计原理详解 智能手机对于宽带无线通信.图像处理等多方面的需求导致实际耗电呈指数增长.未来5G通信带宽将比4G增加10倍,4K/8K等高清视频技术逐渐应用,CPU.GPU等运 ...
- 手机快充功能到底是充电头的功劳还是线的功劳?
什么是手机快充? 快充即快速充电的简称,一般能将充电时间缩短一半甚至更多,但目前只能应用在手机领域上.简单来说,其实就是让手机充电更快一点,通过提高电压和提高电流两种方式来达到快速充电的目的. 手机快 ...
最新文章
- 数据挖掘技术在出行体验上的应用!
- EBS 常见的AD命令
- Design verification经验总结
- 【火炉炼AI】机器学习007-用随机森林构建共享单车需求预测模型
- 居然之家忍“刮骨疗伤”之痛拥抱新零售
- 6.LibSVM核函数
- Vue——定义全局工具类
- 验证哥德巴赫猜想:任何一个大于6的偶数均可表示为2个素数之和
- 手工搭建APACHE服务
- CF980D Perfect Groups
- Oracle 10g、11g :RAC关闭、启动、重启步骤
- Android日志[进阶篇]五-阅读错误报告
- VS Code编译C/C++
- Java可变引用,Java – 对可变对象的易失性引用 – 对对象的字段的更新对所有线程都是可见的...
- pythonlist排序算法_Python版常见的排序算法
- 52)PHP,加了单例模式的数据库代码
- mongodb和mysql创建表_MongoDB 数据库创建删除、表(集合)
- 三个锦囊:剖析 5G 安全难题
- 关于航模的几点总结积累
- 平板电脑刷机加供电系统改造