android14 修改替换关机充电动画

参考https://blog.youkuaiyun.com/qq_48709036/article/details/124406521

参考Android 8.1 关机充电动画(一)模式选择_charge-animation-优快云博客

关机充电是在u-boot驱动中处理,关机充电动画显示的处理方式有两种,本文讨论在android系统的charger中处理,这种方式启动了内核,调用了init,但没有启动android系统而是进入充电程序,另一种是Uboot中处理,两种方法切换方法参考官方文档Rockchip_Androidxx_SDK_Developer_Guide_CN.pdf

按照以下步骤处理

1,切换到android系统的charger中处理关机充电动画显示

修改点 SDK/kernel-xxx

diff --git a/arch/arm64/boot/dts/rockchip/rk3576s-xxxx.dts b/arch/arm64/boot/dts/rockchip/rk3576s-xxxx.dts
index cedd7071a0cb..fd576e3928fc 100644
--- a/arch/arm64/boot/dts/rockchip/rk3576s-xxxx.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3576s-xxxx.dts
@@ -32,8 +32,8 @@ bat: battery {

        charge-animation {
                compatible = "rockchip,uboot-charge";
-               rockchip,uboot-charge-on = <1>;
-               rockchip,android-charge-on = <0>;
+               rockchip,uboot-charge-on = <0>;
+               rockchip,android-charge-on = <1>;
                rockchip,uboot-low-power-voltage = <3450>;
                rockchip,screen-on-voltage = <3500>;
                rockchip,uboot-exit-charge-level = <2>;

动画显示处理的代码在SDK目录system/core/healthd下,

2,增加新增的充电动画

2.1 拷贝动画文件到 healthd/images/ ,还有device/rockchip/common/charger/res/

原先目录下有battery_fail.png ,battery_scale.png 文件

system/core$ ls healthd/images/
battery_fail.png  battery_scale.png   battery_green.png  battery_red.png ,battery_yellow.png

增加了3个动画图片battery_green.png  ,battery_red.png  ,battery_yellow.png

2.2 增加新增的动画处理代码

修改点system/core/

diff --git a/healthd/animation.h b/healthd/animation.h
index c2d5f1c04..b61209a2c 100644
--- a/healthd/animation.h
+++ b/healthd/animation.h
@@ -59,6 +59,9 @@ struct animation {
     // |backup_root| st
### Android MTK 平台关机充电流程解析 #### 1. 关机充电背景 在Android设备中,特别是在MTK平台上,当设备处于关机状态并连接到电源适配器时,系统会进入一种特殊的模式——关机充电模式。这种模式允许电池在不启动操作系统的情况下完成快速充电过程[^3]。 #### 2. PowerManagerService 的角色 `PowerManagerService.java` 是 Android 系统框架中的核心服务之一,负责管理设备的电源状态和唤醒锁等功能。对于关机充电场景而言,该文件定义了一些关键逻辑用于处理设备从正常运行切换至关机以及后续的充电行为[^1]。 以下是 `PowerManagerService` 中可能涉及的关键方法片段: ```java private void handleShutdown() { // 处理关机请求的具体逻辑 if (mShuttingDown) { nativeHandleShutdown(); // 调用本地接口执行实际操作 } } ``` 上述代码展示了如何通过调用原生函数来触发硬件级别的关机动作。此阶段完成后,设备将完全断电,并等待外部条件满足后再重新激活某些模块以支持关机充电功能。 #### 3. 内核重启机制 一旦设备正式进入关机序列,Linux内核层面也会参与其中。具体来说,`do_kernel_restart()` 函数被用来通知所有注册过的重启处理器准备行动。这些处理器通常由驱动程序提供,它们各自承担不同的职责,比如保存当前上下文或者配置特定寄存器以便于之后恢复工作环境[^2]。 下面是一个简化版的例子展示这一过程的一部分实现细节: ```c void do_kernel_restart(char *cmd) { atomic_notifier_call_chain(&restart_handler_list, reboot_mode, cmd); } ``` 这里利用了原子通知链表结构 (`atomic_notifier_call_chain`) 来遍历所有的回调函数实例列表(`&restart_handler_list`) ,从而确保每一个必要的组件都能得到适当的通知去响应即将发生的改变 —— 即系统的彻底关闭或者是转换成备用模式如shutdown charging mode . #### 4. 低电量自动关机阈值设定 针对不同型号的产品设计需求,制造商往往希望自定义设置较低水平下的剩余容量百分比作为强制切断供电的标准。例如,在版本号为9.0及以上的新一代安卓智能手机里,默认情况下如果检测到低于某个预定比例(比如说百分之二),则立即实施紧急停运措施以防过度耗尽锂电池单元内部储存的能量储备造成永久损害等问题发生[^4]。 为此目的所作的主要改动集中在以下几个方面: - **核心类别位置**: 文件路径位于 `frameworks\base\services\core\java\com\android\server\BatteryService.java`. - **主要功能描述**: 修改现有算法使得能够识别新的临界点数值并且依据它做出相应的决策反应. #### 结论 综上所述,我们可以看到整个 android mtk shutdown charging process 不仅涉及到高层级的应用层面上的服务控制,同时也深入到了中间件乃至最底层的操作系统内核部分。只有全面理解各个层次之间的相互作用关系才能真正掌握其全貌并有效解决可能出现的各种复杂状况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值