У меня есть AppWidget, в котором есть StackView. Наряду с AppWidget у меня есть служба, которая запускается, когда пользователь добавляет мой AppWidget на свой домашний экран, который каждые два часа опрашивает новые данные. Когда служба находит новые данные, мне нужно для этого предупредить мой AppWidget, а также передать эти данные в RemoteViewsService (который имеет мой RemoteViewsFactory), чтобы он мог создать необходимые представления для новых данных.
В настоящее время, когда служба находит новые данные, я передаю их моему AppWidget, что новые данные были найдены, передавая эти данные как массив целых чисел в намерении.
Мой метод onReceive в моем AppWidgetProvider извлекает эти данные, и затем я прохожу процесс установки нового намерения, которое передается моим RemoteViews для AppWidget. Пример кода ниже:
public void onReceive( Context context, Intent intent )
{
int[] appWidgetIds = appWidgetManager.getAppWidgetIds( new ComponentName( context, SampleAppWidgetProvider.class ) );
int[] sampleData = intent.getIntArrayExtra( Intent.EXTRA_TITLE );
for ( int i = 0; i < appWidgetIds.length; i++ )
{
// RemoteViewsFactory service intent
Intent remoteViewsFactoryIntent = new Intent( context, SampleAppWidgetService.class );
remoteViewsFactoryIntent.putExtra( AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i] );
remoteViewsFactoryIntent.setData( Uri.parse( remoteViewsFactoryIntent.toUri( Intent.URI_INTENT_SCHEME ) ) );
remoteViewsFactoryIntent.putExtra( Intent.EXTRA_TITLE, sampleData );
RemoteViews rv = new RemoteViews( context.getPackageName(), R.layout.widget_layout );
// Sync up the remoteviews factory
rv.setRemoteAdapter( appWidgetIds[i], R.id.sample_widget, remoteViewsFactoryIntent );
rv.setEmptyView( R.id.sample_widget, R.id.empty_view );
appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
}
super.onUpdate( context, appWidgetManager, appWidgetIds );
}
Это работает в первый раз. Данные отображаются с помощью RemoteViewsService / RemoteViewsFactory. Последующие новые данные не попадают в конструктор RemoteViewsFactory, потому что служба для этой фабрики уже запущена.
Как мне обновить данные? Я чувствую, что должен использовать onDataSetChanged, но как мне получить доступ к намерению, которое я передал из onReceive AppWidget?
Буду признателен за понимание того, как правильно это делать. Спасибо.