Это может быть достигнуто путем получения полной емкости батареи в миллиампер-часах, затем определения процента уровня заряда батареи и, наконец, умножения их вместе, чтобы получить текущее время автономной работы в миллиамперах часов.Следующий блок кода представляет собой функцию для получения полной емкости батареи в миллиамперах:
public double getBatteryCapacity(Context context) {
Object mPowerProfile;
double batteryCapacity = 0;
final String POWER_PROFILE_CLASS = "com.android.internal.os.PowerProfile";
try {
mPowerProfile = Class.forName(POWER_PROFILE_CLASS)
.getConstructor(Context.class)
.newInstance(context);
batteryCapacity = (double) Class
.forName(POWER_PROFILE_CLASS)
.getMethod("getBatteryCapacity")
.invoke(mPowerProfile);
} catch (Exception e) {
e.printStackTrace();
}
return batteryCapacity;
}
Теперь, когда у вас есть емкость батареи, вы можете найтитекущий процент времени автономной работы, а затем умножьте его на общую емкость, чтобы получить заряд в миллиампер-часах :
BatteryManager bm = (BatteryManager)getSystemService(BATTERY_SERVICE);
int batLevel = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
Если вы хотите вернуть процентный уровень заряда батареи в виде числа с плавающей запятой , (пример 89,92%) , вы можете использовать следующий код:
IntentFilter 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 batLevel = (float) level / (float) scale;
Теперь вы можете сделать следующее, чтобы получить время работы от батареи в миллиамперах :
int batteryInMilliamps = getBatteryCapacity(getApplicationContext()) * batLevel;
Если у вас возникнут какие-либо вопросы или у вас возникнут вопросы, просто оставьте комментарий ниже.