4

我在尝试从我的 Android 设备的电池(例如BATTERY_PROPERTY_CAPACITYBATTERY_PROPERTY_CHARGE_COUNTER或)中访问大部分统计数据时遇到问题BATTERY_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。我已经在模拟器,实际设备上尝试过这个,我所想到的一切都未能修改我的结果。

我将不胜感激任何帮助。最终,我要做的是计算设备达到完全充电(充电时)的剩余时间。提前致谢。

4

3 回答 3

4

不确定这对您现在是否有帮助,但只有具有电池电量计(https://source.android.com/devices/tech/power/device.html)的手机才能报告您的一些值寻找。AFAIK,只有 Nexus 6、9 和 10 提供您正在寻找的所有三个值,而 Nexus 5 只提供BATTERY_PROPERTY_CAPACITY.

于 2015-10-29T20:35:36.680 回答
0

您需要注册 Action_Battery_Changed 广播。每当发生此事件时都会调用它。由于这是一个粘性 Intent,因此一旦注册它就会继续广播。下面的方法将获得当前的电池电量。

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);
}
于 2015-08-28T23:24:48.110 回答
0

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

于 2016-01-07T20:03:41.730 回答