【问题标题】:c2dm to update an android widgetc2dm 更新一个 android 小部件
【发布时间】:2011-11-28 12:29:52
【问题描述】:
我正处于下一个 Android 项目的规划阶段。我想为我当前的车库开门器应用程序创建小部件。目前它只是一个应用程序,底部有一个刷新按钮,用于更新门的状态(打开或关闭)。我希望车库中的网络连接设备在我的门状态发生变化时发送一条 c2dm“推送”消息,以便我可以一起取消刷新按钮。如果我创建一个显示门状态的主屏幕小部件,它是否能够在这些 c2dm 消息进入时实时更新,或者小部件只能在计时器上更新?
【问题讨论】:
标签:
android
android-widget
widget
android-c2dm
【解决方案1】:
是的,您可以在 C2DM(现为 GCM)进入时更新您的小部件。
一旦您的应用收到 C2DM(或 GCM)消息,您要么必须从服务器获取更新,或者如果您将其作为有效负载与消息一起发送,则从消息中检索它,并将其存储在本地。然后您必须为您可能已经在使用的小部件启动更新服务。在不了解您的应用程序的情况下,很难准确地说出如何实现这一点。通常,小部件将具有更新的服务。下面是一个通用的更新服务:
public static class UpdateService extends Service {
@Override
public void onStart(Intent intent, int startId) {
RemoteViews updateViews = buildUpdate(this);
// Push update for this widget to the home screen
ComponentName thisWidget = new ComponentName(this, Widget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, updateViews);
}
public RemoteViews buildUpdate(Context context) {
// process the updated view here. Probably would pull data from DB and update views //accordingly
return updateViews;
}
}