Android:如何通过程序打开设备

9

我有一部连接了太阳能充电器的智能手机。白天可以正常充电,但是在晚上由于能量不足有时会自动关机。

我的问题是:是否可以在电池充电超过一定百分比后(通过编程)将其重新打开? 我希望找到一个干净合法的方法,而不是漏洞或攻击。我在官方文档中没有找到任何信息。谢谢。


在那个时候没有用户代码甚至操作系统运行,所以不可能。 - Sami Kuhmonen
3
充电动画是如何显示的? - OneCricketeer
有趣的问题...我有一个类似的情况需要解决。我们正在XDA上讨论这个问题,这是链接:http://forum.xda-developers.com/showthread.php?t=1187631&page=7 - portsample
5个回答

7
为了实现这个功能,需要替换电池动画脚本,该脚本在设备关闭但插入电源时运行,通常会显示充电电池图标。脚本的名称因设备而异,但通常位于/system/bin目录中。三星设备通常将脚本命名为playlpm,我见过的其他脚本名称包括ipodlpmbattery_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

2
我没有一种不依赖硬件且不需要对设备进行root的解决方案。
这个答案只是为了澄清一些误解。
“设备已关闭,无法在其上运行任何类型的软件。”
这既正确又错误。首先,现代设备从未真正“关闭”。有时,关闭按钮仅用于展示(例如您的电视)。有时,处理器确实被断电,但主板上的其他电路仍然以微小的电流供电。其次,此附加电路可以在某些情况下重新启动处理器和其他电路,例如在某些外部事件(例如插入充电线)或当关闭处理器计时器达到零时。
唯一真正关闭现代设备(如智能手机)的方法是拆下电池和电源线。即使这样有时也不起作用,因为主板上可能有一个小电池或低泄漏电容器来保留某些操作状态。

1

没有对设备进行 root,是不可能的。


-1

如果设备已经关闭,就无法在其上运行任何类型的软件。


OP说:“当电池充电超过一定百分比时”,意味着有电源。 - OneCricketeer

-1

启动设备是一项硬件任务,必须有物理电源来运行设备(例如按下电源按钮)。因此您无法仅通过代码进行此操作。必须存在物理电源。


OP说:“当电池充电超过一定百分比”- 意味着有电源。 - OneCricketeer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接