2013-07-10 3 views
0

в моем приложении я отображать уровень заряда батареи .. я получаю уровень заряда батареи таким образом:Какая разница между двумя методами расчета уровня заряда батареи в Android?

int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 

И это нормально, я могу увидеть процент .. но онлайн я нашел еще один способ:

int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 

float batteryPct = level/(float)scale; 

В чем разница? Почему я бы разделил уровень с масштабом? Благодаря

ответ

1

Ну, вы получите разные номера :)

масштаб является integer containing the maximum battery level. Так со вторым способом вы получаете процент (поэтому его называют batteryPct) вы оставили. С первым вы получаете абсолютное количество вашего уровня заряда батареи. Он определяется как integer field containing the current battery level, from 0 to EXTRA_SCALE.

+0

Масштаб жестко закодирован до 100 в исходном коде Android, поэтому он в основном тот же, если только какой-либо производитель не захочет изменить масштаб на что-то еще. (Http://androidxref.com/5.0.0_r2/xref/frameworks/base/services/core/java/com/android/server/BatteryService.java#BATTERY_SCALE) – black

1

Согласно Android docs, масштаб максимальное значение:

общественности статической конечной строки EXTRA_SCALE

Добавлено в уровне API 5 Extra для ACTION_BATTERY_CHANGED: целое , содержащий максимальный уровень заряда батареи.

Константа Значение: "Масштаб"

И LEVEL является текущий уровень:

общественности статической конечной строки EXTRA_LEVEL

Добавлено в уровне API 5 Extra для ACTION_BATTERY_CHANGED: целое поле , содержащий текущий уровень заряда батареи, от 0 до EXTRA_SCALE.

Константа Значение: «Уровень»

Так в основном, первый дает абсолютное число и второе дает вам процент.