Android 获取电池是否充电状态、充电器类型

0. demo 下载

https://github.com/sufadi/BatteryInfo

1. 电池广播获取充电状态

// 电池状态
import static android.os.BatteryManager.EXTRA_STATUS;
// 未知
import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN;
// 充电中
import static android.os.BatteryManager.BATTERY_STATUS_CHARGING;
// 放电中
import static android.os.BatteryManager.BATTERY_STATUS_DISCHARGING;
// 未充电
import static android.os.BatteryManager.BATTERY_STATUS_NOT_CHARGING;
// 电池满
import static android.os.BatteryManager.BATTERY_STATUS_FULL;

    private  BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            if (null == intent) {
                return;
            }

            String action = intent.getAction();

            if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
                int status = intent.getIntExtra(EXTRA_STATUS, BATTERY_STATUS_UNKNOWN);
                ...

    private String getStatus(int status) {
        String result = getString(R.string.battery_status_unknown);

        switch (status) {
            case BATTERY_STATUS_FULL:
                result = getString(R.string.battery_status_full);// 充满电
                break;
            case BATTERY_STATUS_NOT_CHARGING:
                result = getString(R.string.battery_status_not_charging); // 未充电
                break;
            case BATTERY_STATUS_DISCHARGING:
                result = getString(R.string.battery_status_discharging);// 放电中
                break;
            case BATTERY_STATUS_CHARGING:
                result = getString(R.string.battery_status_charging);// 充电中
                break;
            case BATTERY_STATUS_UNKNOWN:// 未知
                break;
        }

        return result;
    }

2. 充电器类型

// 充电器类型
import static android.os.BatteryManager.EXTRA_PLUGGED;
// 充电器
import static android.os.BatteryManager.BATTERY_PLUGGED_AC;
// 其他
import static android.os.BatteryManager.BATTERY_PLUGGED_ANY;
// USB
import static android.os.BatteryManager.BATTERY_PLUGGED_USB;
// 无线充电
import static android.os.BatteryManager.BATTERY_PLUGGED_WIRELESS;


    private  BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            if (null == intent) {
                return;
            }

            String action = intent.getAction();

            if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
                int plugged = intent.getIntExtra(EXTRA_PLUGGED, BATTERY_PLUGGED_ANY);
                ...
                
    private String getPlugged(int plugged) {
        String result = getString(R.string.battery_plugged_any);

        switch (plugged) {
            case BATTERY_PLUGGED_ANY:
                // 其他
                break;
            case BATTERY_PLUGGED_AC:
                // 充电器
                result = getString(R.string.battery_plugged_ac);
                break;
            case BATTERY_PLUGGED_USB:
                // USB
                result = getString(R.string.battery_plugged_usb);
                break;
            case BATTERY_PLUGGED_WIRELESS:
                // 无线充电
                result = getString(R.string.battery_plugged_wireless);
                break;
        }

        return result;
    }

具体键值

    // values of the "plugged" field in the ACTION_BATTERY_CHANGED intent.
    // These must be powers of 2.
    /** Power source is an AC charger. */
    public static final int BATTERY_PLUGGED_AC = 1;
    /** Power source is a USB port. */
    public static final int BATTERY_PLUGGED_USB = 2;
    /** Power source is wireless. */
    public static final int BATTERY_PLUGGED_WIRELESS = 4;
    /** @hide */
    public static final int BATTERY_PLUGGED_ANY =
            BATTERY_PLUGGED_AC | BATTERY_PLUGGED_USB | BATTERY_PLUGGED_WIRELESS;

3. 获取电池是否充电接口

package com.android.settings.fuelgauge;

import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.util.Log;

public class InonePowerSaveUtil {

    public static final boolean IS_CHARGE_DISABLE = true;

    public static boolean isChargingDisable(Context context) {
        return IS_CHARGE_DISABLE && isCharging(context);
    }

    public static boolean isCharging(Context context) {
        Intent batteryBroadcast = context.registerReceiver(null,
                new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
        // 0 means we are discharging, anything else means charging
        boolean isCharging = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) != 0;
        Log.d(InonePowerSaveUtil.class.getSimpleName(),"isCharging = " + isCharging );
        return isCharging;
    }
}
可以通过注册广播接收来监听电池量和插拔状态的变化。具体实现如下: 1. 在 AndroidManifest.xml 文件中添加如下权限: ```xml <uses-permission android:name="android.permission.BATTERY_STATS" /> ``` 2. 创建一个广播接收 BatteryReceiver,实现量和插拔状态的监听: ```java public class BatteryReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 获取当前量 int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); // 获取量最大值 int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100); // 计算量百分比 int batteryPercent = level * 100 / scale; // 获取充电状态 int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; // 获取充电方式 int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean isUSBCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; boolean isACCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; // 处理逻辑 if (isCharging) { if (isUSBCharge) { // USB 充电 } else if (isACCharge) { // 交流充电 } else { // 无线充电 } } else { // 电池 } } } ``` 3. 在需要监听量和插拔状态的页面或服务中注册广播接收: ```java BatteryReceiver batteryReceiver = new BatteryReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BATTERY_CHANGED); registerReceiver(batteryReceiver, filter); ``` 注意:注册广播接收后一定要记得在对应的生命周期(如 Activity 的 onDestroy() 方法)中取消注册,避免内存泄漏: ```java unregisterReceiver(batteryReceiver); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值