由于某些与电池寿命无关的原因,当我将USB主机连接到手机(植根的Nexus 4)时,我需要禁用电池充电。环顾互联网(link1,link2),看来我应该修改系统文件。我在/sys/class/power_supply/battery/sys/class/power_supply/usb中找到了一系列有趣的文件,这些文件可能是要实现USB充电禁用的正确修改文件(例如/sys/class/power_supply/usb/present 0/1)。

是否有人尝试过类似的操作(通过软件控制USB充电并修改此类系统文件)?修改这些系统文件的最佳方法是哪种?我应该使用adb shell还是其他工具?

我尝试使用“ root Explore”应用程序来修改这些文件,但是当我修改文件(更改其权限后)时,该文件会自动保留回到原始值。

评论

尽管这可能会或可能不会助长问题,但我很好奇您为什么要禁用USB充电。

我在这里拥有的东西与嵌入式系统更相似:通过USB连接的电话(USB ACCESSORY)和硬件(USB HOST)。手机电池通过特定的连接(Vdd)为连接的硬件供电。但是,USB HOST应该通过USB的VBUS线为手机供电(或充电)。我要避免的是电话与所连接硬件之间的收费循环。尽管连接的硬件是主机,但提供整个系统的是Android手机。希望我的解释对您清楚。

/ sys是一个虚拟文件系统,内核在其中公开旋钮和开关以更改和查找内核配置。您无法更改文件权限。我猜您的连结手机已解锁并已扎根。充电电路可能基于可配置的Maxim芯片。有可用的已更改内核,它们可以覆盖充电检测。相反也应该是可能的。但是,您可能需要修补并重新编译内核。

nexus 4的Franco Kernel允许快速充电,有可用的信号源。也许您可以看一下并弄清楚如何将其关闭:github.com/franciscofranco

这是驱动程序:github.com/franciscofranco/mako/blob/nightlies-4.3-JWR/drivers / ...

#1 楼

我刚刚尝试过,发现您需要修改文件:sys/class/power_supply/usb/device/charge

其默认内容为“ 1”,这意味着“启用充电”
您需要将其设置为“ 0”至“禁用充电”。

$ su

$ echo 0 > /sys/class/power_supply/usb/device/charge


我在Nexus 4上进行了测试,并且工作正常。

评论


我可以确认在具有CM11的Sony Z1 Compact上,echo 0> / sys / class / power_supply / battery / charging_enabled对我有用。非常感谢! :)

–seanlano
2015年10月5日,下午2:58

请注意,/ sys接口是虚拟的,不会持续重启

–kevinf
18 Mar 7 '18 at 7:32

#2 楼

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


评论


这些命令很有趣,但是它们并没有真正影响充电!您也可以将dumpsys电池设置为42级,而无论实际电池状态如何,Android都会认为它的电量是42%。进行dumpsys电池重置以恢复正常。

– EvgEnZh
20 Nov 14'9:20

此外,这些虚假更改会冻结报告的电池状态,并记录在电池统计信息中,这可能会使它们混乱并导致错误的“剩余时间”预测。

– EvgEnZh
20-11-14在9:30

#3 楼

我不确定它是否可以与您的特定手机的充电器配合使用,但是通常使用既可以传输电源又可以传输数据的电缆,电缆内部有单独的电源线和数据线。

对撕开手机充电器以确认我的想法并不特别感兴趣,但是您可以尝试剥去电缆的一部分,识别并切断电缆内的电源线,然后用胶带将其包起来。

可能有一种更简单的方法可以执行此操作,但我不知道。

评论


USB中通常有4个引脚-2个用于5v电源,2个用于数据。

– NoBugs
2014年7月12日15:32

如果您切断了Vbus并将其接地,也会使数据线停止工作。从电源检测到USB电缆连接(请参阅A连接器,电源引脚稍长一些,因此它们将首先连接)。

– diidu
17年2月28日在10:10

#4 楼

我敢肯定,这不是您可以更改的软件,因为插入计算机USB端口后手机会充电。您可能需要弄脏双手,并在手机本身上短接一两个连接。

评论


是的,也可以通过软件来完成。在此应用中查看扎根的Nexus 4 stopCharge

– STiLLeN
2014年6月11日20:00



#5 楼

您可以使用usb 0; //用于禁用USB充电和
adb shell dumpsys电池组usb 1; //用于启用USB充电

评论


这很容易,但是不幸的是它不会禁用充电。它只会使其看起来像被禁用。

– diidu
17年2月28日在9:26

#6 楼

您可以通过修改micro-USB连接器侧的引脚来解决硬件问题。一种明显的方法是不连接Pin#1(VBUS),另一种方法是将Pin#4(ID)接地以假装您的主机(PC)是OTG设备。如果这样做,则必须断开Pin#1(VBUS)的连接,否则将烧毁其中一个(如果不是两个)设备。

对于命令行解决方案,您只需要找到可以播放的正确(取决于设备)/sys/...文件即可。但是,正如已经提到的那样,您需要写访问权限和root权限才能更改它们,而您所做的任何操作都只会持续到下一次重新启动或更改USB外设为止。

评论


建议的硬件解决方案不正确。几乎所有的Android手机都配有一个USB设备,该设备可以从USB主机(例如笔记本电脑)获取电源,因此可以在“附件”模式下工作。如果切断VBUS线路,则USB数据通信将停止。我自己对此进行了测试。即使我没有测试,我也会以其他方式(ID引脚)说同样的话。您对软件解决方案的看法是正确的,但是并不是所有的Android手机都具有/ sys / ...文件(Nexus 4是,Nexus 5是)。另一个解决方案应该是将计费驱动程序的行为更改为内核。

– STiLLeN
2014年6月11日19:58

#7 楼

与op相似,通过USB连接的Host也作为虚拟电池连接。不能简单地使用USB电缆并且没有电池,android无法启动,usb也不能提供足够的电流。

您无法在软件中修复此问题,因为Android会在引导过程中使用Vbus。除非您也想破解引导加载程序代码。

需要修改充电电路以避免USB充电与电池电压环路的冲突。

我在Galaxy S3上确认它需要5V总线才能启用数据(d + d-), USB标准的一部分。

OTG可以用电气解决问题,但是主机客户端规则不正确。另外,这款手机还可以OTG充电(我使用y电缆+游戏手柄)

编辑参考:https://forum.xda-developers.com/showthread.php?t=1863303

评论


一旦我发现充电电路发生变化,就会更新

–kevinf
18 Mar 7 '18 at 7:14

#8 楼

我问了我的电池驱动专家的同事。在我们的Nut Pro 2(内核版本为4.4.21)上,用于打开/关闭电池充电的节点是:/sys/class/power_supply/battery/input_suspend

#9 楼

您总是可以在针脚1之间使用散装二极管,其阻挡面朝附件。这样一来,插脚会收到5v信号,因此通信正常,但不会有电流从配件流向您的手机。或者,如果您需要,也可以将二极管放在不同的方向。

#10 楼

不,在尚未植根的设备上是不可能的。它使用带有ADB_EN​​ABLED的Settings.System,但是ADB_EN​​ABLED是一个安全系统设置,应用程序无法更改。

是的,可以在有根电话上完成。

需要添加权限android.permission.WRITE_SECURE_SETTINGS。
我知道您会问我该怎么做:
以下是类似应用程序的链接:https:// play。 google.com/store/apps/details?id=com.jim2&hl=zh-CN

评论


ADB_EN​​ABLED与USB充电有什么关系?您链接的应用是否允许禁用USB充电?

–丹·赫尔姆
2014年5月12日上午10:54

应用程序kinda允许您在更改写入安全设置后禁用USB充电。

– Ravindra Sahay
2014年5月12日16:30

“金田”?遵循哪些步骤?

–丹·赫尔姆
2014年5月12日16:39