Мое приложение поддерживает виджеты нескольких размеров по схеме, изложенной здесь как добавить несколько виджетов в одном приложении?
Он имеет единственный абстрактный класс BaseWidgetProvider, который обрабатывает все виджеты. Затем он подклассируется пустыми классами WidgetProvider1 / 2/3/4 (по одному на размер), которые перечислены в манифесте Android, и все работает просто отлично. Регистрация в манифесте выглядит так (типично для 1..4)
<receiver
android:name=".widget.MyWidgetProvider4"
android:label="My Widget size 4" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<intent-filter>
<action
android:name="my.domain.BaseWidgetProvider.UPDATE_WIDGET" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/my_widget_info4" />
</receiver>
Мой вопрос касается отправки намерения из приложения обновить виджеты новыми данными. Я не смог найти способ отправить одно намерение для всех 4 провайдеров, и в настоящее время я отправляю 4 отдельных намерения каждый раз
for (Class cls : BaseWidgetProvider.WIDGET_PROVIDER_CLASSES) {
Intent intent = new Intent(mApp.context(), cls);
intent.setAction(BaseWidgetProvider.UPDATE_WIDGET);
this.sendBroadcast(intent);
}
, где
public static final Class[] WIDGET_PROVIDER_CLASSES = new Class[] {
WidgetProvider4.class,
WidgetProvider1.class,
WidgetProvider2.class,
WidgetProvider3.class
};
Это лучший способ отправить намерение обновления для всех размеров виджетов (обратите внимание, что обычно у пользователя только ноль или один виджет)?
Есть ли разумный способ отправить только одно намерение?
Есть ли способ иметь один приемник, который будет обновлять экземпляры виджетов всех четырех размеров?
Обратите внимание, что базовый класс провайдера не заботится о размере виджета и делает то же самое для всех размеров. Единственная разница - начальный размер виджета на экране пользователя. Если пользователь изменяет размер виджета (например, с помощью Launcher Pro), он работает просто отлично.