我正在尝试在我的应用程序中获取电池统计数据以进行一些基准测试。神奇的BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER让我查询设备的微安,这很棒。然而,这只是在API 21中引入的,因此可以使用此功能的设备数量非常有限。是否有一种兼容的方法可以在较低版本的API(至4.0)中执行类似的操作?我知道BatteryManager.EXTRA_LEVEL会给我百分比,但那真的不够精细。
我正在尝试在我的应用程序中获取电池统计数据以进行一些基准测试。神奇的BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER让我查询设备的微安,这很棒。然而,这只是在API 21中引入的,因此可以使用此功能的设备数量非常有限。是否有一种兼容的方法可以在较低版本的API(至4.0)中执行类似的操作?我知道BatteryManager.EXTRA_LEVEL会给我百分比,但那真的不够精细。
此外,还有一些工具可能会对您有帮助:
祝你好运!
编辑:
P=U*I
(如上所述获取U和I),并随时间积分(在这种离散情况下将是求和),你可能会得到一个非常好的电池消耗近似值。也许你还可以考虑加入卡尔曼滤波器(以减弱U和I上的噪声,记住你的算法不是唯一的消费者),那么你可能会得到你想要的结果。Runtime.getRuntime().exec("cat /sys/class/power_supply/battery/voltage_now")
在某些设备上不起作用,尝试将它们作为文件打开也不行,即使我运行 adb shell cat /sys/class/power_supply/battery/voltage_now
它也可以正常工作。 - David MIntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level / (float)scale;