2

我想获取与 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 布局,以便我可以使用 remoteviews 来更新该布局。我尝试了一些不同的建议,但没有一个能提供我需要与远程视图一起使用的价值。例如“R.id.widget_layout”

我怎样才能以正确的“int”形式从appwidget ID 中获取类似于“R.id.widget_layout”的值,以便与remoteviews 一起使用?

4

2 回答 2

5

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

@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();

    }

}
于 2014-04-14T21:43:13.683 回答
-1

因为我有不止一个小部件提供程序类:

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

我使用服务类来更新小部件,所以我使用“ComponentName”来获取每个小部件提供程序类的 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);
}

对每个小部件提供程序重复此操作

于 2014-04-26T14:23:13.377 回答