有小伙伴问ColorOS如何实现充电到指定电量停止充电(图一)。
实际上ColorOS有一个“智能充电保护”功能,是否智能我就不知道了。除此之外,外销版本有一个“充电至80%”的功能(图二),在内销版本是隐藏的。这两个功能的实现原理一致。底层实现在内核,通过节点/sys/class/oplus_chg/battery/mmi_charging_enable(有的手机可能是/sys/class/power_supply/battery/mmi_charging_enable)控制。
那么,应该如何实现我们的目标需求呢?
方案零:将需求反馈给ColorOS产品经理,然后等,,,实现智能化控制的同时,也应该还给用户自由控制能力,否则,用户只能root自己改咯。
方案一:通过修改feature,打开“充电至80%”的功能。具体修改文件在/my_bigball/etc/extension/appfeature.region_cn.com.oplus.battery.xml,将
方案二:基于Xposed或者zygisk等hook框架的注入能力,修改com.oplus.battery的运行逻辑,不光可以把上面的feature打开,还能实现更多控制,如电量设置。
方案三:自己实现个系统服务或者高权限进程,监听电量变化,不想充电了就echo 0 > /sys/class/oplus_chg/battery/mmi_charging_enable,想充电就echo 1。
方案一的magisk模块改动:
1. 将系统的/my_bigball/etc/extension/appfeature.region_cn.com.oplus.battery.xml文件拷贝到模块的my_bigball/etc/extension/路径,修改上述feature。
2. magisk模块的post-fs-data.sh增加一行命令:mount -o bind ${MODDIR}/my_bigball/etc/extension/appfeature.region_cn.com.oplus.battery.xml /my_bigball/etc/extension/appfeature.region_cn.com.oplus.battery.xml
实现效果见图三、图四:
