首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android :以编程方式打开设备

Android :以编程方式打开设备
EN

Stack Overflow用户
提问于 2016-01-04 22:29:50
回答 5查看 5.7K关注 0票数 9

我有一部智能手机连接到太阳能充电器。白天,它的动力是正确的。但在夜间,有时由于缺乏能量,它会自动关闭。

我的问题是:当电池充电超过某一百分比时,可以(以编程方式)重新打开它?我在找一条干净合法的路。我对瑕疵和功绩不感兴趣。我在官方文件里什么也没找到。谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-01-04 22:51:09

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

这可以被描述为一种“利用”,因为它需要根,并且在Linux级别而不是Android框架级别工作,但是目前没有实现这种行为的替代方法。

进行此更改的一般机制如下所述:https://android.stackexchange.com/questions/20021/automatically-power-on-android-when-the-charger-is-connected。当然,在您这样做之前备份之前的电池动画脚本是一个好主意。

下面的脚本在多个设备(几个三星设备和Verizon 7)上都适用于我。基本上,它检查手机是否接通了交流电源,是否有足够的电量。如果是的话,它会启动。如果没有,则等待N秒,然后再试一次。作为一个副作用,原来的电池动画脚本不会运行,你永远不会看到漂亮的充电动画。

代码语言:javascript
复制
#!/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
票数 7
EN

Stack Overflow用户

发布于 2016-01-06 21:09:06

我没有一个不依赖于硬件的解决方案,也不涉及设备的根。

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

“设备关机了,没有办法在它上运行任何类型的软件”

这是对的,也是假的。首先,现代设备从来没有真正“关闭”过。有时,关闭按钮只是为了表演(例如你的电视)。有时处理器确实是断电的,但是主板上的附加电路仍然是以涓滴电流供电的。其次,这个额外的电路可以在某些情况下为处理器和其他电路提供电源,例如在某些外部事件(例如,插入充电线)上醒来,或者当一个非处理器计时器达到零时。

真正关掉现代设备的唯一方法,如智能手机,就是去掉电池和电源线。即使这样,有时也不能作为一个小电池或低泄漏电容可能在主板上,以保持某些运行状态。

票数 2
EN

Stack Overflow用户

发布于 2016-01-04 22:36:57

如果没有设备根,就不可能实现

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34601041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档