将数据从Android应用程序获取到窗口小部件并显示它

时间:2013-11-06 13:31:24

标签: android widget

我已经开始在我的应用程序中实现一个小部件,但是我在将数据从应用程序转移到小部件时遇到了一些麻烦。

以下是我的小部件的代码:

public class ElectricityMonitorWidgetProvider extends AppWidgetProvider {

    public static final String WIDGETTAG = "WidgetMood";

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);

        System.out.println("Widget onUpdate called..");

        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];
            System.out.println("In loop. App widget id: "+appWidgetId);
        }
    }    
}

在我的小部件中,我只有一个textview,我想用我的应用程序中的数字更新。应用程序通过Web请求获取此编号。

在定期运行的onUpdate()方法中,我希望能够更新该文本视图。

我不知道如何实现这一点。

我是否需要实现一个小部件调用的辅助类,并且在该帮助程序类中我有与应用程序用来接收其使用的数据相同的方法,或者?

这是我第一次实现小部件。我已阅读developer.android.com上的小部件指南,这帮助我将小部件显示在手机上。我唯一缺少的是我描述的功能。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

将此放入您的小部件更新循环

for (int i=0; i<N; i++) {
  int appWidgetId = appWidgetIds[i];
  int value = i; //replace with actual value eg from SharedPreferences
  RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.your_widget);
  remoteViews.setTextViewText(R.id.text_view, String.valueOf(value)); //assumed that R.layout.your_widget contains a TextView with R.id_text_view id

  appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
  System.out.println("In loop. App widget id: "+appWidgetId);
}

请注意,此代码未指定用户触摸窗口小部件时的任何操作(通常需要指定PendingIntent并使用RemoteViews.setOnClickPendingIntent方法挂钩)。

此外,我建议您在需要时更新您的小部件,而不是定期更新你的应用程序可以将自定义Intent发送到你的AppWidgetProvider,它会在覆盖的onReceive()中处理它并更新小部件上的RemoteViews。