Android : 以编程方式打开设备

Android : Turn on a device programmatically

我有一部连接到太阳能充电器的智能手机。 白天,它可以正常供电。但是到了晚上,有时会因为没电而自动关机。

我的问题是:当电池电量超过一定百分比时,可以(以编程方式)将其重新打开吗? 我正在寻找一种干净合法的方式。我对缺陷或漏洞不感兴趣。 我在官方文档中什么也没找到。谢谢。

如果不对设备进行 root 则不可能

如果设备关机,则无法运行任何类型的软件。

启动设备是一项硬件任务,运行 设备必须有物理电源(此处按下电源按钮)。那么你不能用代码来做到这一点。应该有体力。

我上次检查生根是 "legal" 并且需要这样做。

例如,此文件 /system/bin/battery_charging 可能位于您的设备上。编辑它以包含

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

并设置一些权限

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

取自此处:https://android.stackexchange.com/questions/20021/automatically-power-on-android-when-the-charger-is-connected

执行此操作的机制依赖于替换电池动画脚本,即 运行 当设备关闭但插入电源时,通常会显示正在充电的电池图标。脚本的名称因设备而异,但通常位于 /system/bin 目录中。三星设备通常调用脚本 playlpm,我看到的脚本的其他名称包括 ipodlpmbattery_charging。这不一定适用于所有设备,因为这完全超出了标准 Android 框架——某些设备可能没有等效的脚本,或者它们可能以不同的方式实现它。

这可以被描述为一个 "exploit",因为它需要 root 并在 Linux 级别而不是 Android 框架级别工作,但目前没有替代实施这种行为。

此处描述了进行此更改的一般机制:https://android.stackexchange.com/questions/20021/automatically-power-on-android-when-the-charger-is-connected。当然,最好在执行任何操作之前备份之前的电池动画脚本。

以下脚本适用于我的多个设备(多个三星设备和 Verizon Ellipsis 7)。基本上,它会检查 phone 是否已插入交流电源且电量充足。如果是这样,它会启动。如果不是,则等待 N 秒并重试。作为一个副作用,原始的电池动画脚本不会 运行,而且您永远不会看到漂亮的充电动画。

#!/system/bin/sh                                                                               

# battery threshold before boot-up (in percent)                                                
bthresh=10

# time to sleep between checks (in seconds)                                                    
sleeptime=600

# file that contains current battery level as integer between 0 and 100                        
cfi=/sys/class/power_supply/battery/capacity
# file that contains 1 if we're plugged in to AC, 0 if not                                     
acfi=/sys/class/power_supply/battery/subsystem/ac/online

# if either file doesn't exist, just do normal sleep+boot                                      
[ ! -f $cfi ] && sleep $sleeptime && /system/bin/reboot
[ ! -f $acfi ] && sleep $sleeptime && /system/bin/reboot

# populate capacity and AC variables                                                           
c=`cat $cfi`
ac=`cat $acfi`

# stop loop if we're not plugged into AC                                                       
until [ "$ac" -eq 0 ]
do
    # if capacity above threshold, boot up                                                     
    if [ "$c" -gt "$bthresh" ]; then
    /system/bin/reboot
    fi

    # wait some time before next check                                                         
    sleep $sleeptime

    # update capacity and AC variables                                                         
    c=`cat $cfi`
    ac=`cat $acfi`
done

我没有不依赖于硬件且不涉及设备生根的解决方案。

这个回答只是为了澄清一些误解。

"the device is powered off, there's no way to run software of any type on it"

这话是真是假。首先,没有现代设备是真正的 "off"。有时,关闭按钮仅用于显示(例如您的电视)。有时处理器确实断电了,但主板上的附加电路仍以涓流电流供电。其次,这个额外的电路可以在某些情况下为处理器和其他电路供电,例如在某些外部事件(例如插入充电线)或 off-processor 计时器达到零时唤醒。

真正关闭智能设备 phone 等现代设备电源的唯一方法是卸下电池和电源线。即使那样有时也不起作用,因为主板上可能装有小电池或低漏电电容器以保持某些运行状态。