我使用以下代码在两个不同的时间(t1,t2)获取电池电压。 t1在执行任务之前,t2在执行任务之后。因此,按规则,t2必须小于t1。
然而,在执行中并非如此。我得到多个值,更大,更小,等于t1。怎么可能这样呢?即使在Android电池监控工具中,我也注意到有时总电池mAh值会增加几个点而不会堵塞充电器。
public void onCreate() {
BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
int scale = -1;
int level = -1;
int voltage = -1;
int temp = -1;
@Override
public void onReceive(Context context, Intent intent) {
level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);
Log.e("BatteryManager", "level is "+level+"/"+scale+", temp is "+temp+", voltage is "+voltage);
}
};
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryReceiver, filter);
}
答案 0 :(得分:1)
Android框架不断从其power_supply子系统获取信息。因此,在更新后,它将发出BATTERY_STATE_CHANGED意图。
private void updateLocked() {
if (!mUpdatesStopped) {
// Update the values of mAcOnline, et. all.
native_update();
// Process the new values. Sendout the intent
processValuesLocked();
}
}
但它只是在一段时间后更新信息。所以它可能包含一定程度的不准确性。
在native_update的实现中。 Android只会在/sys/class/power_supply/battery
setBooleanField(env, obj, gPaths.acOnlinePath, gFieldIds.mAcOnline);
setBooleanField(env, obj, gPaths.usbOnlinePath, gFieldIds.mUsbOnline);
setBooleanField(env, obj, gPaths.wirelessOnlinePath, gFieldIds.mWirelessOnline);
setBooleanField(env, obj, gPaths.batteryPresentPath, gFieldIds.mBatteryPresent);
setIntField(env, obj, gPaths.batteryCapacityPath, gFieldIds.mBatteryLevel);
setVoltageField(env, obj, gPaths.batteryVoltagePath, gFieldIds.mBatteryVoltage);
setIntField(env, obj, gPaths.batteryTemperaturePath, gFieldIds.mBatteryTemperature);
因此,如果你想要电压信息,你可以简单地说:
$cat /sys/class/power_supply/battery/voltage_now
$cat /sys/class/power_supply/battery/batt_vol
请注意,voltage_now是微伏,而不是毫伏。
如果您愿意,也可以以编程方式阅读。
然而,它可能仍然不够准确,因为这些数据的内容由opearting系统更新(可能类似于电源驱动程序),因此对于非常准确的统计数据,您可能必须尝试硬件方法。) / p>
答案 1 :(得分:0)
How could this be possible?
电池mAh值是作为电池的电压测量的。但是这个电压会不时变化。当有高电流消耗时它会下降一点,然后在处理器空闲时返回。它也随温度变化而变化。总的来说,这是非常不准确的。