Ho un AppWidget che ha uno StackView contenuto al suo interno. Insieme a AppWidget, ho un servizio che viene avviato quando un utente aggiunge AppWidget alla sua schermata iniziale che esegue il polling dei nuovi dati ogni due ore. Quando il servizio trova nuovi dati, ho bisogno che avvisi il mio AppWidget e che passi anche a RemoteViewsService (che ha il mio RemoteViewsFactory) in modo che possa creare le viste necessarie per i nuovi dati.Passando un array di numeri interi da un AppWidget a un RemoteViewsService preesistente per il rendering da RemoteViewsFactory
Attualmente, quando il servizio trova nuovi dati, ho trasmesso al mio AppWidget che sono stati trovati nuovi dati, passando tali dati come una matrice di numeri interi all'interno di un intent.
Il mio metodo onReceive nel mio AppWidgetProvider estrae i dati, quindi eseguo il processo di impostazione di un nuovo intent che viene passato a RemoteViews per AppWidget. Il codice di esempio qui di seguito:
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);
}
questo funziona la prima volta. I dati vengono visualizzati da RemoteViewsService/RemoteViewsFactory. I nuovi dati successivi non colpiscono il costruttore di RemoteViewsFactory perché il servizio per quel factory è già in esecuzione.
Come posso aggiornare i dati? Sento che dovrei usare onDataSetChanged, ma come potrei accedere all'intento che ho passato da onReceive di AppWidget?
Apprezzerei qualsiasi idea su come procedere correttamente. Grazie.
Se posso ottenere onGetViewFactory nel RemoteViewsService a correre di nuovo, mi sarebbe in grado di ottenere i nuovi dati dal intento passato al dati. O se posso in qualche modo dire al servizio di aggiornare i suoi dati ... – Steven