我有一部连接到太阳能充电器的智能手机。 白天,它可以正常供电。但在夜间,有时它会因缺乏能量而自行关闭。
我的问题是:当电池电量超过一定百分比时,可以(以编程方式)将其重新打开吗? 我正在寻找一种干净合法的方式。我对缺陷或漏洞不感兴趣。 我在官方文档中什么也没找到。谢谢。
最佳答案
执行此操作的机制依赖于替换电池动画脚本,该脚本在设备关闭但接通电源时运行,通常会显示正在充电的电池图标。脚本的名称因设备而异,但一般位于/system/bin
目录下。三星设备通常调用脚本 playlpm
,我看到的其他脚本名称包括 ipod
、lpm
和 battery_charging
。这不一定适用于所有设备,因为这完全超出了标准 Android 框架——某些设备可能没有等效的脚本,或者它们可能以不同的方式实现它。
这可以被描述为一种“漏洞利用”,因为它需要 root 权限并在 Linux 级别而不是 Android 框架级别运行,但目前没有其他方法可以实现此行为。
此处描述了进行此更改的一般机制:https://android.stackexchange.com/questions/20021/automatically-power-on-android-when-the-charger-is-connected .当然,在执行任何操作之前备份之前的电池动画脚本是个好主意。
以下脚本对我来说适用于多种设备(多种三星设备和 Verizon Ellipsis 7)。基本上,它会检查手机是否已插入交流电源并且电量是否充足。如果是这样,它会启动。如果不是,则等待 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
关于安卓 : Turn on a device programmatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34601041/