从安卓手机获取剩余电池时间

7

能否从安卓手机上获取剩余电池时间呢?

谢谢。


“_remaing time_”是什么意思? - Vladimir
获取 Android 手机电池的剩余可用时间。 - Sodino
你是指电池剩余充电时间吗?请确保问题清晰明了,不要发表任何问题以获取此类评论,如果这样做,您将会被投反对票,最终可能失去进一步提问的机会。 - Yugandhar Babu
你可以从http://developer.android.com/reference/android/os/BatteryManager.html#EXTRA_LEVEL获取当前电池电量,但你需要找到一种方式来根据一些标准估算“剩余时间”。 - Vladimir
@Sodino,你是如何解决你的问题的? - Erum
3个回答

5

有一些应用程序(如电池小部件等)可以估计电池耗尽前的剩余时间。我猜它们会根据处理器使用率、背光亮度等因素,获取当前电池电量并尝试计算当前的耗电量。根据我的经验,它们的准确性不太高,但原则上如果你正确地设计算法,应该是可能的。


4

你可以通过注册用于操作Intent.ACTION_BATTERY_CHANGED的广播接收器来获取电池寿命。我的回答很简短,从Android Developers网站上获取信息即可。

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

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

我希望你能从中受益。

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

它将返回电池剩余时间:1小时55分钟41秒682毫秒, 如果是0% - 电池剩余时间:0ms,如果手机正在充电,则不返回任何内容


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