Mam AppWidget, który zawiera StackView w nim. Wraz z AppWidget, mam usługę, która jest uruchamiana, gdy użytkownik dodaje mój AppWidget do ich ekranu głównego, który sonduje nowe dane co dwie godziny. Kiedy usługa znajdzie nowe dane, potrzebuję go zaalarmować mój AppWidget, a także przekazać te dane do RemoteViewsService (która ma mój RemoteViewsFactory), aby mógł utworzyć niezbędne widoki dla nowych danych.Przekazywanie tablicy liczb całkowitych z AppWidget do istniejącej usługi RemoteViewsService do renderowania przez RemoteViewsFactory
Obecnie, gdy usługa znajduje nowe dane, wysyłam ją do mojego AppWidget, że znaleziono nowe dane, przekazując te dane jako tablicę liczb całkowitych w ramach intencji.
Moja metoda onReceive w mojej aplikacji AppWidgetProvider wyciąga te dane, a następnie przechodzę przez proces konfigurowania nowego zamiaru, który jest przekazywany do moich RemoteViews dla AppWidget. Przykładowy kod poniżej:
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);
}
To działa po raz pierwszy. Dane są wyświetlane przez RemoteViewsService/RemoteViewsFactory. Kolejne nowe dane nie trafiają do konstruktora RemoteViewsFactory, ponieważ usługa dla tej fabryki już działa.
Jak mogę zaktualizować dane? Czuję, że powinienem używać DataSetChanged, ale w jaki sposób uzyskać dostęp do zamiaru, który przekazałem z OnReceive AppWidget?
Byłbym wdzięczny za wszelkie informacje na temat tego, jak poprawnie to zrobić. Dzięki.
Jeśli mogę dostać onGetViewFactory w RemoteViewsService uruchomić ponownie, chciałbym być w stanie uzyskać nowe dane z zamiarem przekazywane do dane. Lub jeśli mogę jakoś powiedzieć usłudze, aby odświeżyć jego dane ... – Steven