根据此处列出的方案how to add multiple widgets in one app?
,我的应用支持多种尺寸的小部件它有一个抽象的BaseWidgetProvider类,可以处理所有小部件。然后通过Android Manifest中列出的空WidgetProvider1 / 2/3/4类(每个大小一个)进行子类化,一切正常。清单中的注册看起来像这样(典型的是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),它就可以正常工作。
答案 0 :(得分:3)
将具有一个intent动作的intent过滤器添加到Manifest文件中所有窗口小部件提供程序的声明中,例如:
<intent-filter>
<action android:name="my.domain.blablabla.MY_SUPER_INTENT_TO_UPDATE_ALL" />
</intent-filter>
然后只需从您的应用程序发送此意图作为广播。 在这种情况下,意图将由所有窗口小部件提供程序处理。