Я создал виджет батареи, который использует Службу для прослушивания изменений батареи.
Обратите внимание, что постоянное обслуживание службы обычно не является хорошей идеей.Пользователям это не понравится, и они будут убиты с помощью программы-убийцы или экрана «Управление службами» в настройках.Android тоже не понравится и в конечном итоге остановит его.
Поскольку уровень заряда батареи меняется не очень часто, рассмотрите возможность переключения на модель, где вы используете AlarmManager
, и проверяйте уровень заряда батареи каждые несколько минут.
Однако из-за этого при создании виджет должен ждать, пока состояние батареи изменится, прежде чем он сможет отображать данные.
Нет.Когда вы регистрируетесь на ACTION_BATTERY_CHANGED
, ваш BroadcastReceiver
немедленно вызывается с последней отправленной трансляцией для этого действия, поскольку ACTION_BATTERY_CHANGED
является залипшей трансляцией.
Вы можете видеть, что в этом примерепроект .Информация об аккумуляторе отображается в действии немедленно - это возможно только потому, что метод onReceive()
вызывается немедленно.
Мой вопрос заключается в том, существует ли простой метод опроса аккумулятора какодин случай.
Это тоже возможно.Звоните registerReceiver()
для ACTION_BATTERY_CHANGED
, но с null
BroadcastReceiver
.Вам будет возвращено последнее отправленное сообщение Intent
для этого действия.Это был бы способ обработать это, например, из события AlarmManager
.