是否可以从Android手机获得剩余电池时间?
感谢。
答案 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
,如果手机正在充电,它不会返回任何内容