如何获取与appwidget ID关联的appwidget布局

时间:2014-04-06 13:20:33

标签: android android-appwidget appwidgetprovider

我想获得与appwidget id相关联的appwidget布局。

在appwidget的Widget提供程序类中,android文档提供了一种简单的方法来获取appwidget ID ...

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    final int N = appWidgetIds.length;
    // Perform this loop procedure for each App Widget that belongs to this provider
    for (int i=0; i<N; i++) {
        int appWidgetId = appWidgetIds[i];


但是他们ID不允许我知道它来自哪个appwidget提供者(多个小部件提供者和布局)。

编辑:我正在使用服务类来更新小部件,而不是小部件提供程序类。

在服务类中,我想获取每个id的appwidget布局,以便我可以使用远程视图来更新该布局。我尝试了一些不同的建议,但没有一个给我带来我需要用于远程视图的价值。例如“R.id.widget_layout”

如何从正确的“int”形式的appwidget ID中获取类似“R.id.widget_layout”的值以用于远程视图?

2 个答案:

答案 0 :(得分:4)

您可以通过以下方式获取AppWidget布局ID以及有关每个AppWidget的提供程序的信息:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    final int N = appWidgetIds.length;

    for(int i=0; i<N; i++) {

        int appWidgetId = appWidgetIds[i];

        // you can use layoutId variable instead of R.id.widget_layout
        int layoutId = appWidgetManager.getAppWidgetInfo(appWidgetId).initialLayout;
        // String yourProvider will be something like .WidgetProvider2x2
        String yourProvider = appWidgetManager.getAppWidgetInfo(appWidgetId).provider.getShortClassName();

    }

}

答案 1 :(得分:-1)

因为我有多个小部件提供程序类:

  • 我有一组单独的代码来更新每个提供程序的小部件。我无法找到一种方法让一组代码更新所有小部件提供商的所有小部件(但我仍然相信它是可能的)。

我正在使用服务类来更新小部件,因此我正在使用&#34; ComponentName&#34;获取每个widget提供程序类的widgetIds。

我的解决方案是这样,对每个小部件提供程序类重复:

// update all 2x2 widget instances
ComponentName thisWidget2x2 = new ComponentName(getBaseContext(), WidgetProvider2x2.class);
int[] allWidgetIds2x2 = localAppWidgetManager.getAppWidgetIds(thisWidget2x2);
for (int widgetId : allWidgetIds2x2) {
    RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget_layout_2x2);
    remoteViews.setImageViewResource(R.id.imageviewA_B, timePhraseA_B);
    remoteViews.setOnClickPendingIntent(R.id.topLayout, openAwcPi);
    localAppWidgetManager.updateAppWidget(widgetId, remoteViews);
}

每个窗口小部件提供程序都会重复此操作