如何在 ADB 连接期间禁用电池充电?

How to disable battery charging during ADB connection?

问题描述: 每次我在 PC 和手机之间连接 USB 数据线 phone 时,电池都会自动充电。我想使用 ADB 协议,但我不想在 ADB 连接期间为电池充电。 pos是否可以关闭此充电?当然我该怎么做?

环境: 手机 phone Android os 4 及以上

我只需要提到我的参考设备在 android 5 上工作,所以没有 /sys/class/power_supply/battery/force_usb_charging 文件

可能可以通过(root 权限)完成:

/sys/devices/battery.XX/power_supply/battery/hv_charger_set

0 - 禁用 USB 充电

1 - 启用 USB 充电

您可以使用

让系统认为它没有加载电池

adb shell dumpsys battery unplug

参考这篇好文章: https://stanfy.com/blog/android-shell-part-1-mocking-battery-status/

注意:adb shell dumpsys battery unplug 仅模拟电池状态。我检查了 USB 电缆上的电流指示器,这根本不会改变流动的电流量,因此电池仍在充电。 它只会改变应用程序对状态的看法,例如 google 如果您配置它只能在充电时更新,播放将不会开始更新...

/sys/devices/battery.XX/power_supply/battery/hv_charger_set 等文件的值更改为 0 确实有效,但每个设备的文件不同。例如,对于我的带金鱼草 805 的 yotaphone 2,有一个文件:/sys/devices/qpnp-charger-14/power_supply/battery/charging_enabled

所以你可以制作一个可以在 tasker 中使用的脚本(如果你有 root):

echo > /sys/devices/qpnp-charger-14/power_supply/battery/charging_enabled

如果你将其写入可执行文件 /data/setcharging.sh 那么你可以调用脚本 /data/setcharging.sh 0 来禁用或 /data/setcharging.sh 1 启用。

这有效,我检查了我当前的计量 USB 电缆,但它没有显示它在电池状态图标中有效。所以你可以使用这个和 adb shell dumpsys battery unplug / reset 的组合来让它看起来更好,但问题是像 tasker 这样的应用程序不知道你是否有交流电源,所以你不能为此设置触发器您已将其设置为不插电...

还有一件事,我还测试了它在恢复 (twrp) 和启动期间的作用。事实证明,在启动和恢复期间,充电正常。因此,如果您忘记再次打开充电,您的设备不会最终没电。您始终可以在恢复模式下为它充电,然后启动并再次更改值(或者如果您的恢复允许访问 adb,则在恢复时更改它)。

最后,Play 商店中有专门为此制作的应用程序,但我建议获取这样的电流指示 USB 电缆,并检查它们是否真的按照他们说的去做,而不仅仅是嘲笑。

对 root 设备试试这个:

要启用电池充电:

    adb shell dumpsys battery set ac 1
    adb shell dumpsys battery set usb 1
    adb shell dumpsys battery set wireless 1

要禁用电池充电:

    adb shell dumpsys battery set ac 0
    adb shell dumpsys battery set usb 0
    adb shell dumpsys battery set wireless 0

如果 android os 版本超过 6,请拔下并重置以恢复原状。

adb shell dumpsys battery unplug
adb shell dumpsys battery reset

复制自perfetto.dev

On rooted phones the power management IC driver allows to disconnect the USB charging while keeping the USB data link active. This feature is SoC-specific, is undocumented and not exposed through any HAL. For instance on a Pixel 2 this can be achieved running, as root: echo 1 > /sys/devices/soc/800f000.qcom,spmi/spmi-0/spmi0-02/800f000.qcom,spmi:qcom,pmi8998@2:qcom,qpnp-smb2/power_supply/battery/input_suspend. Note that in most devices the kernel USB driver holds a wakelock to keep the USB data link active, so the device will never fully suspend even when turning the screen off.