c2dm для обновления виджета Android - PullRequest
1 голос
/ 28 ноября 2011

Я нахожусь в стадии планирования для моего следующего проекта Android. Я хотел бы создать виджет для моего текущего приложения для открывания гаражных ворот. В настоящее время это просто приложение, а внизу есть кнопка обновления, которая обновляет состояние двери (открыто или закрыто). Я хотел бы, чтобы подключенное к сети устройство в моем гараже отправляло «push» сообщение c2dm в любое время, когда состояние моей двери изменяется, чтобы я мог покончить с кнопкой обновления все вместе. Если я создам виджет домашнего экрана, который показывает состояние двери, сможет ли он обновляться в режиме реального времени при поступлении этих сообщений c2dm, или виджеты могут обновляться только по таймеру?

1 Ответ

1 голос
/ 05 июля 2012

Да, вы можете обновить свой виджет при входе 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;
    }


}
...