Я искал в Интернете и не смог найти ответ на мой вопрос. Моя проблема состоит в том, чтобы получить информацию об уровне заряда батареи только один раз, например. вызывая функцию getBatteryLevel()
. Есть только решения, которые реализуются с помощью BroadcastReceiver
, но, как я знаю, он будет вызываться каждый раз при событии изменения уровня батареи. Пожалуйста, скажите, как я могу получить эту информацию только один раз?
Получайте уровень заряда батареи только один раз, используя Android SDK
Ответ 1
Передача Intent.ACTION_BATTERY_CHANGED
- это то, что называется "липкой трансляцией". Поскольку это является липким, вы можете зарегистрироваться для трансляции с нулевым приемником, который будет получать только уровень заряда аккумулятора один, когда вы вызываете registerReceiver
.
Функция получения уровня заряда батареи без получения обновлений выглядит примерно так:
public float getBatteryLevel() {
Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
// Error checking that probably isn't needed but I added just in case.
if(level == -1 || scale == -1) {
return 50.0f;
}
return ((float)level / (float)scale) * 100.0f;
}
Больше данных можно извлечь из этой липкой трансляции. Используя возвращенный batteryIntent
, вы можете получить доступ к другим дополнительным функциям, указанным в классе BatteryManager
.