Виджеты для домашнего экрана устройства Android могут обновляться не только самостоятельно, но и по запросу из приложения. Например, если изменились настройки или данные обновлены службой.
Пример обновления виджета службой уже был рассмотрен статье посвящённой обновлению виджетов (пример с AlarmManager). Приведённый механизм является общим для всех случаев. Однако требует некоторых дополнительных пояснений.
Для обновления виджета извне (Activity, службы) его класс обязательно должен включать специальный статический метод.
1 |
public static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) |
Самостоятельное обновление виджета возможно и при помощи события onUpdate.
В свою очередь для того чтобы указанный метод можно было вызвать из внешнего источника необходимо выполнить ряд предварительных шагов. А, именно получить объект класса AppWidgetManager и идентификатор виджета.
Рассмотрим их выполнение на примере Activity.
Объект класса AppWidgetManager на самом деле можно легко получить из любого объекта приложения через контекст.
1 |
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); |
Для получения идентификатора виджета вначале требуется получить массив идентификаторов. Сделать это можно с помощью полученного ранее объекта AppWidgetManager.
1 |
int appWidgetIds[] = appWidgetManager.getAppWidgetIds(new ComponentName(this.getApplicationContext().getPackageName(),Widget.class.getName())); |
Метод getAppWidgetIds принимает в качестве параметра объект ComponentName. Для создания этого объекта необходимо передать его конструктору имя пакета приложения и имя класса виджета
На этом подготовительные действия завершены. Можно обновлять виджет.
1 |
updateAppWidget(this.getApplicationContext(),appWidgetManager, int appWidgetIds[0]); |
Таким образом, можно обновить виджет домашнего экрана из любого компонента приложения.
Добавить комментарий