如何每秒刷新小部件?

Posted

技术标签:

【中文标题】如何每秒刷新小部件?【英文标题】:How to refresh widget every second? 【发布时间】:2012-02-10 10:37:47 【问题描述】:

看看下面的代码,我需要每秒更新一次这个 onUpdate 方法,有人可以举一些好的例子吗?主要是我需要将代码从CurFreq(context);更新为views.setTextViewText(R.id.text_widget_batt, prefNameBattery+"%");

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];

            Intent intent = new Intent(context, MyActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
            views.setOnClickPendingIntent(R.id.layout_widget, pendingIntent);

            CurFreq(context);
            Temp(context);
            Battery(context);

            SharedPreferences myPrefsInfo = context.getSharedPreferences("myPrefsInfo", Context.MODE_PRIVATE);
            String prefNameCurFreq = myPrefsInfo.getString(WidgetCurFreq, "");
            String prefNameTemp = myPrefsInfo.getString(WidgetTemp, "");
            String prefNameBattery = myPrefsInfo.getString(WidgetBattery, "");

            views.setTextViewText(R.id.text_widget_freq, prefNameCurFreq);
            views.setTextViewText(R.id.text_widget_temp, prefNameTemp+",0°C");
            views.setTextViewText(R.id.text_widget_batt, prefNameBattery+"%");

            appWidgetManager.updateAppWidget(appWidgetId, views);
        

【问题讨论】:

应用小部件并非设计为每秒更新一次。 但这不是我的问题的答案。 你会注意到我没有提供它作为答案,而是作为评论。 【参考方案1】:

您可以编写 Service 并实现 timer ,并相应地每秒更新小部件。 在计时器中调用您的方法在 OnStartCommand(Intent, int, int) 服务方法中。

【讨论】:

我用 Service 和 Thread 解决了这个问题。不过谢谢你的建议。

以上是关于如何每秒刷新小部件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用来自 Activity 的数据更新小部件?

每秒定期更新小部件

单击按钮刷新时如何刷新小部件列表视图?

如何在 FutureBuilder() 中正确“刷新”小部件

更新/刷新动态创建的 WxPython 小部件

让苹果小部件频繁刷新 - 使用蛮力