能否从安卓手机上获取剩余电池时间呢?
谢谢。
能否从安卓手机上获取剩余电池时间呢?
谢谢。
有一些应用程序(如电池小部件等)可以估计电池耗尽前的剩余时间。我猜它们会根据处理器使用率、背光亮度等因素,获取当前电池电量并尝试计算当前的耗电量。根据我的经验,它们的准确性不太高,但原则上如果你正确地设计算法,应该是可能的。
你可以通过注册用于操作Intent.ACTION_BATTERY_CHANGED的广播接收器来获取电池寿命。我的回答很简短,从Android Developers网站上获取信息即可。
通过在具有上述意图操作的BroadcastReceiver的onReceive()方法中使用以下语句,您将获取当前可用的电池电量(例如,50%,60%等)。但是,您无法估算剩余时间,因为某些应用程序可能会消耗更多的电力。因此,我认为电池电量到剩余时间的转换不会给出正确的结果。
battery_level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
明白了!你只需从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
,如果手机正在充电,则不返回任何内容