安卓 : Turn on a device programmatically

标签 android boot battery

我有一部连接到太阳能充电器的智能手机。 白天,它可以正常供电。但在夜间,有时它会因缺乏能量而自行关闭。

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

最佳答案

执行此操作的机制依赖于替换电池动画脚本,该脚本在设备关闭但接通电源时运行,通常会显示正在充电的电池图标。脚本的名称因设备而异,但一般位于/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

关于安卓 : Turn on a device programmatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34601041/

相关文章:

java - 如何在 Android 上通过应用程序确定资源分配

android - 我可以将 View 作为 Android 上数据绑定(bind) BindingAdapter 的输入吗?

Android VideoView 更新字幕

Android SSLEngine 示例

assembly - "org xxxx"在汇编中有什么用

linux - 桌面双启动: Full resource availability

android错误的启动时间

android - 限制 android GPS 跟踪,但将数据收集限制在非常特定的地理区域以及手机处于运动状态时

Android 和 SQLite : When to use semicolons to end statements?

android - 使用 EXTRA_PLUGGED 获取 USB 电缆插入 IN/OUT 事件不起作用