如果最初关闭了设备,那么一旦连接充电器,是否可以自动打开设备电源?

#1 楼

电池充电图形通过三星设备上的/system/bin/playlpm文件显示。

如果您是root用户,则可以将此文件编辑为:

#!/system/bin/sh
/system/bin/reboot


并确保将这些权限添加到文件中:

chmod 0755 /system/bin/playlpm
chown root.shell /system/bin/playlpm


现在,插入后您的设备将启动

评论


感谢@IET_DEMO,您知道用于cyanogenmod设备的解决方案吗?

–m0j1
16年4月5日在20:54

嗨,我有一个Cyanogenmod设备,您知道如何在cyanogenmod上进行此操作吗?谢谢

–m0j1
16-4-20的2:34

这仅适用于Samsung设备。这可能对您有用

–IET_DEMO
16-4-20在13:56



如果您尝试执行此操作,请确保playlpm文件中没有回车符,否则它将无法正常工作。

– ZorroDeLaArena
16-10-4在12:38

#2 楼

因此,有很多方法可以做到这一点。正如Google始终(以及越来越多的其他人(例如,来自nougat的nvidia)所支持的)一样,最适当的命令是此fastboot命令

fastboot oem off-mode-charge 0


否则,您可以劫持充电二进制文件(并非保证在所有设备上都可以使用,但仅需要root用户)或修补ramdisk(理论上是通用的,但需要解锁的引导程序)。

对于第一个解决方案,您必须在系统分区中的某个位置(通常是bin文件夹)中找到负责电池动画的程序以及所有程序所在的位置。一些常见的名称:


摩托罗拉:charge_only_mode

Mediatek:kpoc_chargeripod

Htc:chargemonzchgd
< br三星:playlpmlpm

索尼:chargemonbattery_charging

基于AOSP的大多数rom:healthd


一旦找到,您就可以用IET_DEMO上面的脚本替换它。

触摸内核反而是我不想解释和建议的,如果您不知道自己是什么的话是做。

随便记录一下,我只想强调一下存在离线充电的原因,因为启动过程会耗费大量能源,尤其是在较旧的手机上,即使没有快速充电,系统的耗电也可能比插头上的要高。

#3 楼

如果您的设备支持,则fastboot oem off-mode-charge 0是真实的方法。这是Google推荐的方法,但并非所有OEM /供应商都在bootloader中实现该命令。或者在某些设备上,它将在下次重新启动时重置。如果禁用了off-mode-charge,则在插入充电器时,引导加载程序不会将androidboot.mode=charger命令行参数传递给内核,因此设备会正常启动。

否则,当启动时ro.bootmode属性设置为charger时,init不会继续执行正常的启动过程。而是启动有限数量的服务,并显示收费动画。因此,只要检测到充电器模式,您就可以指示init重新启动设备。创建一个新的.rc文件或编辑任何现有文件:

# /system/etc/init/off_mode_charge.rc

on charger
    setprop sys.powerctl reboot,leaving-off-mode-charging


或执行reboot二进制文件:

on charger
    exec - -- /system/bin/reboot leaving-off-mode-charging


但是,如果SELinux正在执行,则库存策略可能不会让init执行/system/bin/reboot。因此,请使用Magisk的上下文(或使用的任何生根解决方案):

on charger
    exec u:r:magisk:s0 -- /system/bin/reboot


不要忘记对*.rc文件(chown 0.0chmod 0644chcon u:object_r:system_file:s0)设置权限。 />
也可以继续启动过程,而不用通过在class_start charger文件中的trigger late-init替换/init.rc来重新启动设备:

on charger
    #class_start charger
    trigger late-init


或通过设置属性sys.boot_from_charger_mode

on charger
    setprop sys.boot_from_charger_mode 1



此方法适用于所有设备,而与OEM无关,因为它不依赖于供应商特定的充电二进制文件,例如playlpmbattery_chargingchargeonlymodezchgdkpoc_charger等。
也不要替换重要服务的二进制文件,例如healthd-这些二进制文件要处理很多与电池,存储等有关的内容-也不是一个好主意。在这种情况下,如果服务同时以chargernormal模式运行,则设备可能会进入引导循环。
在非系统级根设备上,无需修改/system分区(例如,如果您不想破坏dm-verity以使OTA更新正常工作)。只需解压缩boot.img的文件并在/init.rc中编辑ramdisk文件即可。
尽管不必要,也可以从init.d文件中执行.rc脚本。有关参考,请参见如何在启动时运行可执行文件?以及如何在卸下充电器时关闭电源?。


相关:


Android设备加载过程


评论


@JeffLuyet感谢您的路径更正。如果现有问题/答案中的某些内容未正确解决,您可以提出一个新问题。我刚刚看到了您建议的修改机会。没有通知发送。 //我不知道为什么它对您不起作用。至少从Android 7起,我就一直在使用init的.rc文件。它始终有效。通常,SELinux是最有问题的部分。第一次尝试失败后,您应该已经在内核日志(dmesg)上看到过。 init将其事件记录到内核日志中。这样便可以找出问题所在。

–艾尔凡·拉蒂夫(Irfan Latif)
20-2-22在19:06



@IrfanLatif谢谢您在这里的帖子。我有以下问题,是否必须为此扎根?我得到gta3xlwifi:/ etc / init $ cat> off-mode-charge.rc / system / bin / sh:无法创建off-mode-charge.rc:只读文件系统

–omega1
20 Jun 15'10:12



@ omega1绝对需要root。或者至少需要进行自定义恢复才能从那里修改boot.img或/ system。连接充电器时自动开机的任何方法都不能在没有root的情况下工作,除非fastboot设置为off-mode-charge(如果设备支持)。

–艾尔凡·拉蒂夫(Irfan Latif)
20年6月15日在10:19

@IrfanLatif感谢您的确认。它不支持fastboot oem关机模式充电,我在生根设备(Samsung SM-T510)时惨遭失败,我遵循了我所能找到的所有指南,或者陷于错误或在步骤的不同部分失败(我肯定错过了什么)。我设法加载到TWRP中,可以从那里修改boot.img吗?我可能会查一下,看看是否可以那样做。谁曾想到这会这么难!

–omega1
20年6月15日在10:44

#4 楼

刚刚为中兴通讯(Boost Force,Sprint Force等)工作。

我使用了IET_DEMO的答案,但是用以下代码替换了位于/system/bin/battery_charging的文件:

#!/system/bin/sh
/system/bin/reboot


评论


嗨,我有一个Cyanogenmod设备,您知道如何在cyanogenmod上进行此操作吗?谢谢

–m0j1
16-4-20的2:34

#5 楼

对于某些较旧的三星设备,可以通过NoMoarPowah !:


NoMoarPowah来完成!充电完成后可以自动重启进入Android。无论是充满电还是电池电量达到15%且Android有足够的汁液来运行。


您需要root,除非您真的知道,否则可能不希望这样做您正在做什么,因为我希望它会修改重要的系统文件。


它似乎已从Play商店中删除,但您可能可以找到其他位置托管的APK 。 (我暂时没有可信任的链接。)

#6 楼

如果您想做相反的事情,请在充电时关机,请使用以下方法:“在不充电时自动关机” https://play.google.com/store/apps/details?id=com.zeroFactorial.probattle对我的车的设备有好处而且按钮坏了

#7 楼

内核是在启动过程的稍后阶段加载的,因此对其进行任何修改都不会对关闭设备电源产生任何影响。

此功能实际上取决于每个设备的硬件,大多数例如,当我连接充电器时,我的Motorola Atrix 4G手机将开始启动,而我的Samsung Galaxy Tab无法启动-它会显示“电池充电”图形,并且需要手动开机。

评论


那么什么在屏幕上显示电池充电图形呢?!...现在当您手动按下电源按钮时,就会调用引导加载程序,但是哪段代码在屏幕上显示了电池充电图形?

–穆罕默德·甘杜尔(Muhammad Ghandour)
2012年3月4日在9:19

在断电状态下,设备在诸如电源按钮和充电器之类的硬件事件上的行为显然取决于底层代码,包括SoC / PMIC固件和引导加载程序。但是我还没有看到过一个Android设备,其引导程序完全在不涉及OS的情况下自行处理充电(不确定是否在2012年)。 Bootloader将费用移交给Android内核,甚至启动init。唯一的不同是,与普通用户空间相比,未安装/ data(可能还有其他文件系统),并且启动了一组有限的服务。

–艾尔凡·拉蒂夫(Irfan Latif)
20-2-19在22:45