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
执行此操作的机制依赖于替换电池动画脚本,即 运行 当设备关闭但插入电源时,通常会显示正在充电的电池图标。脚本的名称因设备而异,但通常位于 /system/bin
目录中。三星设备通常调用脚本 playlpm
,我看到的脚本的其他名称包括 ipod
、lpm
和 battery_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 等现代设备电源的唯一方法是卸下电池和电源线。即使那样有时也不起作用,因为主板上可能装有小电池或低漏电电容器以保持某些运行状态。
我有一部连接到太阳能充电器的智能手机。 白天,它可以正常供电。但是到了晚上,有时会因为没电而自动关机。
我的问题是:当电池电量超过一定百分比时,可以(以编程方式)将其重新打开吗? 我正在寻找一种干净合法的方式。我对缺陷或漏洞不感兴趣。 我在官方文档中什么也没找到。谢谢。
如果不对设备进行 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
执行此操作的机制依赖于替换电池动画脚本,即 运行 当设备关闭但插入电源时,通常会显示正在充电的电池图标。脚本的名称因设备而异,但通常位于 /system/bin
目录中。三星设备通常调用脚本 playlpm
,我看到的脚本的其他名称包括 ipod
、lpm
和 battery_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 等现代设备电源的唯一方法是卸下电池和电源线。即使那样有时也不起作用,因为主板上可能装有小电池或低漏电电容器以保持某些运行状态。