Je sais que c'est possible, mais je ne trouve pas de moyen de déclencher une mise à jour de mon widget à partir de l'activité principale. N'y a-t-il pas une intention générale que je puisse diffuser ?
Où définissez-vous widgetId
?
Je sais que c'est possible, mais je ne trouve pas de moyen de déclencher une mise à jour de mon widget à partir de l'activité principale. N'y a-t-il pas une intention générale que je puisse diffuser ?
Si vous utilisez un AppWidgetProvider
, vous pouvez le mettre à jour de cette manière:
Intent intent = new Intent(this, MyAppWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
// Utilisez un tableau et EXTRA_APPWIDGET_IDS à la place de AppWidgetManager.EXTRA_APPWIDGET_ID,
// car il semble que onUpdate() est seulement déclenché sur cela:
int[] ids = AppWidgetManager.getInstance(getApplication())
.getAppWidgetIds(new ComponentName(getApplication(), MyAppWidgetProvider.class));
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
sendBroadcast(intent);
@KrisB à partir de la réponse ci-dessous, obtenez le tableau en faisant ceci: int ids[] = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), WidgetProvider.class));
Cela m'a aidé lorsque j'ai cherché sur comment mettre à jour un widget à partir d'un service ou d'une action (mais cela peut être possible depuis n'importe quel contexte) :
Context context = this;
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_2x1);
ComponentName thisWidget = new ComponentName(context, MyWidget.class);
remoteViews.setTextViewText(R.id.my_text_view, "monTexte" + System.currentTimeMillis());
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
Je sais que j'arrive ici comme 6 mois en retard. Mais je suis d'accord avec Andrew. J'ai essayé la méthode originale dans ce fil de discussion. Et quelque chose concernant la façon dont les identifiants sont récupérés a provoqué son échec. Cette méthode (de mettre à jour directement les champs manuellement) fonctionne mieux. Du moins pour mes besoins.
Choses impressionnantes. Je ne sais pas comment vous avez réussi à obtenir cela, mais cela fonctionne bien et parfaitement pour toutes les instances de mon Widget. :)
Donc pour mettre à jour un widget depuis une activité, vous pouvez le faire comme ceci :
Intent intent = new Intent(this, DppWidget.class);
intent.setAction("android.appwidget.action.APPWIDGET_UPDATE");
int ids[] = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), DppWidget.class));
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids);
sendBroadcast(intent);
Fonctionne pour moi :)
Il suffit de récupérer une instance de AppWidgetManager
et de la mettre à jour directement. Ou, si vous utilisez un IntentService
pour effectuer les mises à jour, appelez startService()
sur le IntentService
. Le AppWidgetProvider
est une façon de mettre à jour le widget de l'application, mais ce n'est pas la seule façon.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.