如何通过编程停止手机通过USB充电

15
我尽可能做了很多研究,但找不到这个相当简单的问题的答案(在设置SDK和其他一切之前,我想找出这个问题)。 我正在考虑开发我的第一个应用程序,并想知道从BatteryManager中的BATTERY_STATUS_CHARGING是否仅包含get函数还是也包含set函数。
我想制作一个应用程序,可以手动停止手机充电,而不必从充电器(通过USB)拔掉它,因此想知道这是否可行。

这个链接可能会回答你的问题:https://dev59.com/Smw15IYBdhLWcg3wYKqo - luxer
6个回答

9
不,非root设备无法实现此功能。它使用Settings.SystemADB_ENABLED,但ADB_ENABLED 是一个安全系统设置,不可被应用程序更改。
是的,可以在root手机上完成此操作。
需要添加android.permission.WRITE_SECURE_SETTINGS权限。
Google Play上有同类型应用:https://play.google.com/store/apps/details?id=com.jim2&hl=en

7
您可以采用有线方式:串联12欧姆电阻仍然可以使手机被计算机识别,同时缓慢放电。请参考附图。microUSB cable plugged into PCB. PCB shows VCC connected to wire via 12Ω resistor, and D-, D+ and GND connected directly to wires. All wires go to cable out of image

电阻太低了,会导致电阻发热。建议使用220欧姆的电阻。但是如果你想保护电池,这种方法可能不起作用,无论电流大小。最好在手机操作系统中关闭充电功能。如果你使用类似LineageOS的系统,则可以编辑内核源代码并默认禁用充电,或根据OP的要求编程开启或关闭充电。 - CR.

6

我知道这个帖子已经很老了,但是无论如何我还是要回答一下,供以后查看的人参考。试试这个方法:

echo 0 > /sys/class/power_supply/batterycharging_enabled/charging_enabled

它可以关闭电池充电。请注意保留原有的HTML标签。


3
在我的手机里有这样一个文件:/sys/class/power_supply/battery/battery_charging_enabled。将该文件的内容更新为0后,充电停止了(根据AccuBattery和LED提供的信息)。但我很好奇这是否安全。我不知道充电器是否真的停止提供电流,还是只是软件“认为”它已经充满了电。 - dey
@dey:这取决于您手机的实现。在我的Xperia X Performance(API Level 26)和Xperia Ray(API Level 15)上,一旦相应的文件被更新,就不会有功率消耗。然而,X Performance可以连续几个小时不失去电荷,而Xperia Ray的电池很快就会失去电荷,并且必须不时地通过更改值来充电。 - Alex Essilfie

3
很遗憾,这是不可能的。Android只有针对电池数据的读取API。ADB_ENABLED在此情况下也无济于事,因为它只能启用通过USB进行调试。
电池充电控制是由Android内核和电池IC模块内部完成的。制造商会不时更改它,但是应用程序没有root权限且无法通过某些复杂的接口控制IC(集成电路)模块,因此无法使用。实际上,这个接口几乎对每个设备都不一样!
如果我们非常幸运,最好的情况是sysfs接口可以帮助实现这一点,但是它同样需要root权限,并且在不同的设备上可能会有所不同。

0
使用以下命令停止在Android 11上的充电。 设备需要获取root权限。
我正在使用Termux,但也可以使用Linux Deploy。
sudo nano /sys/class/power_supply/battery/charger.0/stop_charge

将值更改为1以停止,更改为0以重新开始


0
使用以下命令在连接 USB 时停止移动设备/手持设备的充电:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接