Par programme de mise à jour du widget de l'activité/service/récepteur
Je sais que c'est possible, mais je ne peux pas trouver un moyen de déclencher une mise à jour de mon widget à partir de l'activité principale. N'est-il pas certains d'intention générale, je peux diffuser?
Si vous sont à l'aide d'un AppWidgetProvider, vous pouvez la mettre à jour de cette façon:
Intent intent =newIntent(this,MyAppWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);//Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID,//since it seems the onUpdate() is only fired on that:int[] ids =AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(newComponentName(getApplication(),MyAppWidgetProvider.class));
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
sendBroadcast(intent);
acclamations qui a parfaitement fonctionné.
Où avez-vous mis widgetId?
Le AppWidgetProvider, puis d'exécuter les onUpdate() la méthode?
à partir de la réponse ci-dessous, obtenir le tableau en faisant ceci: int id[] = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(nouveau Nomcomposant(getApplication(), WidgetProvider.class));
je suis également confrontée au même problème, et j'ai utilisé ur le code pour mettre à jour l'app widget sur l'activité de la finition, Mais dans mon cas, elle a appelé la onUpdate() la méthode de widget fournisseur de classe, mais après que l'échec d'appel le RemoteViewsService classe. Mon code instantané est ce stackoverflow.com/questions/15523736/...
Il appel le onRecieve remplacer la méthode. Mais la question est à propos de comment appeler la méthode onUpdate.
Vous pouvez utiliser une constante, pas besoin de coder en dur: intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
Grande réponse. Depuis id est requis uniquement pour le bien de cuisson onUpdate au moins dans mon cas, je viens de simuler une id de la manière suivante:int[] id = {0}; - je obtenir tous les vrais widget Id dans ma classe de service.
j'ai ajouté le code ci-dessus. il appelle onUpdateMethod(), mais ce n'est pas l'actualisation de la liste vue avec une nouvelle mise à jour de la base de données des valeurs.
NE PAS suivre @gelupa commentaire à utiliser R. xml.mywidget pour widgetID! Il est COMPLÈTEMENT faux et juste m'a coûté 4 heures de débogage!!! UTILISATION MobileMon solution pour obtenir de bons widgetID
pour id: ` int widgetIDs[] = AppWidgetManager.getInstance(activité).getAppWidgetIds(nouveau Nomcomposant(activité, widget.class));`
Facilement converti à Xamarin (C#). Seul problème a été de créer les Nomcomposant dû utiliser "Java.Lang.Classe.FromType(typeof(MyAppWidgetProvider)).Nom".
Ce devrait être accepté comme réponse à mon humble avis
Je sais que je suis en sautant ici de 6 mois de retard. Mais je suis d'accord avec Andrew. J'ai essayé la méthode originale dans ce fil. Et quelque chose à propos de la façon dont les Identifiants sont attrapé causé à commencer à échouer. Cette méthode (de directement mettre à jour manuellement les champs) fonctionne mieux. Pour ma part, au moins.
Génial choses. Ne sais pas comment vous avez fini avec cela, mais fonctionne très bien et en douceur de toutes les instances de mon Widget. 🙂
cela a fonctionné pour moi aussi. J'ai pensé que nous devons faire, de diffusion et de onReceive, mais mes exigences s'adaptent parfaitement à cette
fonctionne très bien, - 8 ans plus tard. Incroyable !
Étonnamment, seulement cette petite réponse résolu. Je ne sais toujours pas les implications de l'instanciation de la classe Widget et la possibilité d'appeler directement la méthode onUpdate, mais bon, ça fonctionne enfin 🙂
La accepté de répondre ne fonctionne pas... je vais tester cela.
Il fonctionne comme un charme!
Merci. Je suis en train de tester maintenant et va poster des commentaires. Testé et confirmé de travail. Je me demandais, si il y a différents types de widgets, seront-ils les mêmes? (+1 par la voie de travail)
je reçois toujours des id 0
merci c'est un travail comme un charme
Cela ne fonctionne pas sur Android Oreo aucune solution de contournement à corriger?
Dans le cas où vous travaillez avec un widget qui utilise une collection comme la ListView, GridView, ou Empilervoir, de mettre à jour le widget articles, procédez comme suit:
int widgetIDs[]=AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(newComponentName(getApplication(),WidgetProvider.class));for(int id : widgetIDs)AppWidgetManager.getInstance(getApplication()).notifyAppWidgetViewDataChanged(id, R.id.widget_view);}
Nécessite min-niveau api: 11.
Génial. Vous n'avez même pas à boucle, il y a une version de notifyAppWidgetViewDataChanged() qui prend un tableau.
Viens d'obtenir un AppWidgetManager exemple et le mettre à jour directement. Ou, si vous utilisez un IntentService à faire les mises à jour, appelez startService() sur le IntentService. Le AppWidgetProvider est un mise à jour de l'app widget, mais il n'est pas le seul moyen.
Je suis nouveau sur le système Android, avez-vous un rapide exemple de code de votre solution?
Si vous sont à l'aide d'un
AppWidgetProvider
, vous pouvez la mettre à jour de cette façon:widgetId
?intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
Cela a aidé quand j'ai cherché sur comment mettre à jour un widget à partir d'un service ou d'action (mais peut-être possible de chaque Contexte):
Afin de mettre à jour un widget à partir d'une activité, vous pouvez le faire comme ceci:
Fonctionne pour moi 🙂
Essayez ceci:
Dans le cas où vous travaillez avec un widget qui utilise une collection comme la ListView, GridView, ou Empilervoir, de mettre à jour le widget articles, procédez comme suit:
Avec cette méthode notifyAppWidgetViewDataChanged(), vous pouvez forcer le widget éléments à récupérer les nouvelles données en temps réel.
notifyAppWidgetViewDataChanged()
qui prend un tableau.Viens d'obtenir un
AppWidgetManager
exemple et le mettre à jour directement. Ou, si vous utilisez unIntentService
à faire les mises à jour, appelezstartService()
sur leIntentService
. LeAppWidgetProvider
est un mise à jour de l'app widget, mais il n'est pas le seul moyen.Phaethon de la solution retenue dans Kotlin:
Où MyAppWidgetProvider est dérivé de AppWidgetProvider:
class MyAppWidgetProvider : AppWidgetProvider() {