Обновить виджет Android при условии - PullRequest
3 голосов
/ 09 августа 2010

Я только начинаю с разработки для Android и написал приложение, чтобы показать подробную информацию о состоянии батареи. Теперь я хотел поместить все это в виджет - и вот вопрос: Мне действительно нужен сервис обновления в фоновом режиме для прослушивания намерений ACTION_BATTERY_CHANGED? Моей первой мыслью было поставить просто добавьте строку в тег intet-filter виджета в AndroidManifest.xml - но, очевидно, все не так просто. Если UpdateService - правильный путь, я сделаю это, но я просто хотел убедиться, что является правильным решением

Ответы [ 3 ]

4 голосов
/ 09 августа 2010

Действительно ли мне нужна служба обновлений в фоновом режиме для прослушивания намерений ACTION_BATTERY_CHANGED?

Нельзя использовать зарегистрированный манифест BroadcastReceiver для ACTION_BATTERY_CHANGED.Он может быть зарегистрирован только действием или службой через registerReceiver().

Если у вас нет службы в памяти по другим причинам, лучше подойти к опросу.Установите AlarmManager, чтобы периодически проверять уровень заряда батареи (настраивается, пожалуйста!).Чтобы проверить уровень заряда батареи, позвоните registerReceiver() для ACTION_BATTERY_CHANGED IntentFilter без BroadcastReceiver (null для первого параметра).Это вернет последнюю трансляцию ACTION_BATTERY_CHANGED Intent, из которой вы можете получить самый последний уровень заряда.

2 голосов
/ 09 августа 2010

Я предлагаю вам периодически проверять состояние батареи, например, каждые 30 минут.Для этого вы можете просто указать значение для updatePeriodMillis в вашем AppWidgetProviderInfo

<appwidget-provider
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:updatePeriodMillis="1800000" />

.. и обновить свой виджет, переопределив onUpdate метод вашего AppWidgetProvider.

редактирования: Как указал Мартин, 30 минут - это самый короткий интервал, в котором вы можете получать обновления таким способом.

1 голос
/ 11 сентября 2011

Верьте или нет, работает следующее:

cont.getApplicationContext().registerReceiver(rec, filter);
...