59人参与 • 2025-12-13 • Android
通过 android 的电池广播,你可以拿到:
| 信息 | 说明 |
|---|---|
| 当前电量 level | 当前电量百分比 |
| 电量最大值 scale | 一般 100 |
| 是否在充电 | ac / usb / 无线充电 |
| 充电开始 / 充电结束 | 通过广播监听 |
| 电池健康状态 | good、overheat 等 |
| 电池温度 | 部分机型支持 |
android 推荐方式:
val batterymanager = context.getsystemservice(context.battery_service) as batterymanager val batterylevel = batterymanager.getintproperty(batterymanager.battery_property_capacity)
batterylevel 即为 0–100 的电量百分比
兼容 android 5–16。
android 使用以下广播:
class batteryreceiver(private val callback: (batteryevent) -> unit) : broadcastreceiver() {
override fun onreceive(context: context, intent: intent) {
when (intent.action) {
intent.action_power_connected -> {
callback(batteryevent.chargestart)
}
intent.action_power_disconnected -> {
callback(batteryevent.chargestop)
}
intent.action_battery_changed -> {
val level = intent.getintextra(batterymanager.extra_level, -1)
val scale = intent.getintextra(batterymanager.extra_scale, 100)
val status = intent.getintextra(batterymanager.extra_status, -1)
val ischarging = status == batterymanager.battery_status_charging ||
status == batterymanager.battery_status_full
val percent = level * 100 / scale
callback(batteryevent.batteryinfo(percent, ischarging))
}
}
}
}
sealed class batteryevent {
data object chargestart : batteryevent()
data object chargestop : batteryevent()
data class batteryinfo(val level: int, val ischarging: boolean) : batteryevent()
}val receiver = batteryreceiver { event ->
when (event) {
is batteryevent.chargestart -> log.d("battery", "开始充电")
is batteryevent.chargestop -> log.d("battery", "停止充电")
is batteryevent.batteryinfo -> log.d("battery", "电量=${event.level}%, 是否充电=${event.ischarging}")
}
}
val filter = intentfilter().apply {
addaction(intent.action_battery_changed)
addaction(intent.action_power_connected)
addaction(intent.action_power_disconnected)
}
registerreceiver(receiver, filter)public class batteryreceiver extends broadcastreceiver {
@override
public void onreceive(context context, intent intent) {
string action = intent.getaction();
if (intent.action_power_connected.equals(action)) {
log.d("battery", "开始充电");
} else if (intent.action_power_disconnected.equals(action)) {
log.d("battery", "停止充电");
} else if (intent.action_battery_changed.equals(action)) {
int level = intent.getintextra(batterymanager.extra_level, -1);
int scale = intent.getintextra(batterymanager.extra_scale, 100);
int status = intent.getintextra(batterymanager.extra_status, -1);
boolean ischarging = status == batterymanager.battery_status_charging ||
status == batterymanager.battery_status_full;
int percent = level * 100 / scale;
log.d("battery", "电量=" + percent + "% 是否充电=" + ischarging);
}
}
}注册:
intentfilter filter = new intentfilter(); filter.addaction(intent.action_battery_changed); filter.addaction(intent.action_power_connected); filter.addaction(intent.action_power_disconnected); registerreceiver(new batteryreceiver(), filter);
1.无需权限
获取电量/充电状态 不需要任何危险权限。
2.action_battery_changed 是粘性广播
不需要手动发送,一调用 registerreceiver() 就能拿到当前电量。
3.android 10–16 完全兼容
这些电池广播没有废弃,可直接用。
可以用:
val intent = context.registerreceiver(null, intentfilter(intent.action_battery_changed))
即可直接拿:
val level = intent?.getintextra(batterymanager.extra_level, -1) val status = intent?.getintextra(batterymanager.extra_status, -1)
到此这篇关于android实现获取手机的电池电量和充电状态的文章就介绍到这了,更多相关android获取手机信息内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论