Подтвердить что ты не робот

Получайте уровень заряда батареи только один раз, используя Android SDK

Я искал в Интернете и не смог найти ответ на мой вопрос. Моя проблема состоит в том, чтобы получить информацию об уровне заряда батареи только один раз, например. вызывая функцию getBatteryLevel(). Есть только решения, которые реализуются с помощью BroadcastReceiver, но, как я знаю, он будет вызываться каждый раз при событии изменения уровня батареи. Пожалуйста, скажите, как я могу получить эту информацию только один раз?

4b9b3361

Ответ 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.