当前位置: 代码网 > it编程>App开发>Android > Android实现获取手机的电池电量和充电状态

Android实现获取手机的电池电量和充电状态

2025年12月13日 Android 我要评论
一、可获取的信息通过 android 的电池广播,你可以拿到:信息说明当前电量 level当前电量百分比电量最大值 scale一般 100是否在充电ac / usb / 无线充电充电开始 / 充电结束

一、可获取的信息

通过 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 使用以下广播:

  • action_battery_changed(粘性广播,不需要手动注册)
  • action_power_connected—— 插上电源(开始充电)
  • action_power_disconnected—— 拔掉电源(停止充电)

四、实际可用代码(kotlin)

1. 监听充电状态的 broadcastreceiver

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()
}

2. 在 activity / service 中注册

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)

五、java 写法

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获取手机信息内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com