Требуется анализировать работу батареи в реальном времени так, чтобы получить предположительные сведения о том, сколько осталось времени до того, как батарея сядет, а так же расход батареи в процентах в минуту. Подскажите, пожалуйста, инструменты, которые могут в этом помочь.
Для начала нужно узнать какое текущее состояние зарядки:
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
дальше вы можете узнать текущий статус батареи:
// Зарядились/заряжаемся?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
// Как именно мы заряжаемся?
int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
Следующий этап - отслеживание изменения состояния батареи. Для этого вам нужно в манифесте добавить ресивер для получения данных о батарее:
<receiver android:name=".PowerConnectionReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
и дальше сам ресивер:
public class PowerConnectionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
}
}
Текущий заряд ( в процентах) можно определить так:
int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level / (float)scale;
Дальше вы можете отследить существенные изменения (так написано в доках и мне кажется что это очень разряженное состояние у батареи):
<receiver android:name=".BatteryLevelReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
<action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
</intent-filter>
</receiver>
Вот есть либа для получения статистики о использовании батареи. Вот доки по теме батареи и получения статуса. Вот доки по вопросу оптимизации работы батареи. Вам для прогнозирования времени работы батареи нужно будет брать логи BatteryManager
и дальше высчитывать скорость разряда исходя из полученных данных, и дальше из этой скорости калькулировать приблизительное (тут ключевое слово приблизительное) время работы устройства от батареи. Но это время может меняться в зависимости от того как интенсивно вы используете устройство так как на разряд влияет куча факторов, вот статья по этому вопросу. И мой вам совет - найдите какую-то более-менее адекватную программу для сравнения времени работы, чтобы у вас не получились какие-то магические числа исходя из которых у пользователя будет 100к мАч батарея на устройстве :)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
При создании уведомления я получаю значение Uri такого формата
Не могу понять как это сделать, уже все перепробовалTextArea находится в классе BotOverviewController, а передаю данный с класса MainApp
Дано - входящий массив; из которого нужно убрать все дубликаты и вернуть число, состоящее из оставшихся чисел массиваРеализовать нужно через...