从Android手机获取剩余电量时间

时间:2012-01-19 09:13:00

标签: android power-management

是否可以从Android手机获得剩余电池时间?

感谢。

3 个答案:

答案 0 :(得分:4)

有一些应用程序(电池小部件等)可以估算电池电量耗尽前的剩余时间。我猜他们会采用当前的电池电量并尝试根据处理器使用情况,背光水平等来计算电流消耗。根据我的经验,它们不太准确,但原则上如果你得到正确的算法它应该是可能的。

答案 1 :(得分:3)

您可以通过注册接收器进行操作 Intent.ACTION_BATTERY_CHANGED ,在广播接收器的帮助下获得电池续航时间。我的回答是关键,从Android开发者网站获取信息。

通过在具有上述Intent操作的BroadcastReceiver的onReceive()方法中使用以下语句,您将获得当前可用的电池电量(例如,50%,60%等)。但你无法估计剩余的时间,因为一些应用程序可能消耗更多的电量。所以我认为电池水平到剩余时间的转换不会给出正确的结果。

battery_level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);

我希望它可以帮助你。

答案 2 :(得分:0)

明白了!您可以只从 dumpsys 获取信息,但需要 ROOT 权限。我可以执行命令并获得输出:

fun execRoot(command: String): Pair<String, Boolean> {
    return try {
        val process = Runtime.getRuntime().exec(
            arrayOf(
                "su",
                "-c",
                "cd / && $command"
            )
        )
        val reader = BufferedReader(InputStreamReader(process.inputStream))
        var line: String?
        var final = ""
        while (reader.readLine().also { line = it } != null) {
            final = "$final$line\n"
        }
        return Pair(final, true)
    } catch (e: IOException) {
        Pair("", false)
    }
}

通过这个函数,我可以捕捉 dumpsys 的输出。 您可以通过此行获取有关剩余时间的信息:

var line = execRoot("dumpsys batterystats | grep -E \"Battery time remaining\"").first

它将返回 Battery time remaining: 1h 55m 41s 682ms, 如果有 0% - Battery time remaining: 0ms,如果手机正在充电,它不会返回任何内容