Android BatteryManager对所有属性检索调用返回0



我在尝试访问Android设备电池(如BATTERY_PROPERTY_CAPACITY, BATTERY_PROPERTY_CHARGE_COUNTERBATTERY_PROPERTY_CURRENT_AVERAGE)的大多数统计数据时遇到了麻烦。这些属性都清楚地记录在这里:http://developer.android.com/reference/android/os/BatteryManager.html

我在清单上声明了以下权限:

<uses-permission android:name="android.permission.BATTERY_STATS" />

我有一个非空的BatteryManager实例:

mBatteryManager = (BatteryManager) getSystemService(BATTERY_SERVICE);

当我试图检索这些统计数据时:

double remainingCapacity = mBatteryManager.getIntProperty(
            BatteryManager.BATTERY_PROPERTY_CAPACITY);
double batteryCapacityMicroAh = mBatteryManager.getIntProperty(
            BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER);
double averageCurrentMicroA = mBatteryManager.getIntProperty(
            BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE);

结果都是0。总是,无一例外,为0。我已经在模拟器上试过了,一个实际的设备,我所想到的一切都没有改变我的结果。

我将非常感谢任何帮助。最后,我想做的是计算设备(在充电时)充满电的剩余时间。

不确定这是否对您有任何帮助,但只有具有电池燃料计(https://source.android.com/devices/tech/power/device.html)的手机才能报告您正在寻找的一些值。据我所知,只有Nexus 6、9和10给出了您正在寻找的所有三个值,而Nexus 5只给出了BATTERY_PROPERTY_CAPACITY

您需要注册Action_Battery_Changed广播。无论何时发生此事件,都会调用此方法。由于这是一个粘性意图,它会在注册后继续广播。下面的方法将获得当前电池的电量。

private void getBatteryPercentage() {
    BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            context.unregisterReceiver(this);
            int currentLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
            int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
            int level = -1;
            if (currentLevel >= 0 && scale > 0) {
                level = (currentLevel * 100) / scale;
            }
            Toast.makeText(MainActivity.this, level + "%", Toast.LENGTH_LONG).show();
        }
    };
    IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    registerReceiver(batteryLevelReceiver, batteryLevelFilter);
}

BatteryManager的值。EXTRA_LEVEL为当前电池容量。我猜你正在寻找总容量(满),你需要阅读/sys/class/power_supply/battery/charge_full_design或charge_full,不同的制造商可能有不同的路径。

实际设备api 30,未经允许

val batteryManager = context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager
val capacity = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
val counter = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER)
val average = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE)

最新更新