Android: Wie kann ich erzwingen, das aktualisieren aller widgets der besonderen Art
Habe ich gesehen, dass viele Fragen in dieser Richtung, und ich sehe immer die gleiche Antwort wieder und wieder. Ich will nicht zu haben, um einen Service für jede Art von widget meine app hat, vor allem zu sehen, wie meine app hat bereits 2 persistente Dienste.
Speziell, wenn einer meiner bestehenden Diensten sieht, dass sich Daten geändert haben, ich will update my widgets. Tun dies auf einem timer ist ärgerlich, denn es könnte Tage zwischen den updates, oder es kann mehrere innerhalb einer Stunde. Ich will meine widgets, um IMMER up-to-date Informationen.
Android-widget design scheint zu funktionieren auf der Grundlage, dass Ihre widget-Informationen zieht, wenn er es will, ich denke, es gibt viele sinnvolle Szenarien, in denen eine Aktivität wünschen können push-Daten, um ein widget.
Lesen Sie die Antwort unten, wie ich herausgefunden, wie genau dies zu tun. Soweit ich sehen kann, gibt es keine Nebenwirkungen, wenn es richtig gemacht wird.
InformationsquelleAutor Chris Noldus | 2011-11-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kraft unseres widgets für einen bestimmten widget-Anbieter aktualisiert werden, müssen wir Folgendes tun:
Schritt 1 - einrichten unserer AppWidgetProvider
Ich gehe nicht durch die details der Erstellung der info-xml-Datei oder änderungen an der Android-Manifest - wenn Sie nicht wissen, wie ein widget zu erstellen, richtig, dann gibt es genug tutorials gibt, sollten Sie zuerst Lesen.
Hier ist ein Beispiel
AppWidgetProvider
Klasse:Schritt 2 - Senden Sie die broadcast -
Hier erstellen wir eine statische Methode, werden unsere widgets zu aktualisieren. Es ist wichtig, dass wir unsere eigenen Schlüssel mit dem widget-update-Aktion, wenn wir AppWidgetmanager.EXTRA_WIDGET_IDS wir werden nicht nur brechen unsere eigenen widget, sondern auch andere.
Wenn Sie mit dieser Methode bei mehreren Anbietern STELLEN Sie SICHER, Sie verwenden unterschiedliche Schlüssel. Ansonsten können Sie finden widget ein code-Update-widget b und das kann einige bizarre Folgen.
Schritt 3 - Aktualisierung klicken Sie auf
Eine andere nette Sache zu tun ist, um das widget zu aktualisieren magiacally, wenn es angeklickt wird. Fügen Sie den folgenden code in die update-Methode erreichen:
Dieser code verursacht die onUpdate-Methode immer aufgerufen, wenn das widget angeklickt wird.
Hinweise
Diese Antwort hat mich inspiriert, bei der Festsetzung eines wirklich fiesen Problem, bei dem widgets waren verrückt auf dem TouchWiz-launcher. Sachen wie blinken, random content, und dann verschwinden. Das geschah nur zu unserem widget allerdings, andere waren einfach nur gut. Wenn das passiert dir: NICHT verwenden
AppWidgetmanager.EXTRA_WIDGET_IDS
, auch wenn es funktioniert auf allen anderen Geräten. Dies ist wahrscheinlich etwas, das behoben wurde, in AOSP und Samsung hat nicht gezogen in Ihre code (noch) nicht.Ich denke, widget-Anbieter sollte entscheiden, was zu tun ist, basierend auf der Handlung in der Absicht und nicht die extras, die enthaltenen. Was tun Sie in Schritt #2 ist "ducktyping", wenn Sie Ihre eigene Aktion, Sie können jede Art von extra-Tasten (auch die eingebauten).
Beachten Sie, dass wenn Sie nur wollen, Sie zu aktualisieren alle Ihre AppWidgets ohne irgendwelche anderen Daten, die Sie übergeben können Ihr provider Namen AppWidgetManager, die Vermeidung böse Fragen über AppWidget-Ids. Siehe Antwort.
ich versuchte dieses aber es immer noch nicht aktualisieren können Sie mir helfen stackoverflow.com/questions/39388686/...
InformationsquelleAutor Chris Noldus
Sorry an den OP für eine späte Antwort, aber für alle anderen, Sie können eine Methode wie diese zu aktualisieren alle Ihre app-widgets, einer bestimmten Art (layout und Klasse):
Was dieser tut, ist es schafft eine
RemoteViews
für Ihr layout und dann bekommt halt derAppWidgetManager
und findet alle app-widgets für die Klasse, die Sie zur Verfügung gestellt sind, durchläuft Sie und aktualisiert Sie.RemoteViews
Sie sind (oder sollten zumindest denken Sie es), ab derRemoteViews
vorbei. Wenn alles, was Sie wollen zu tun ist, aktualisieren Sie das Bild, und lassen Sie alle anderen Attribute im Takt, Sie besser (re)legen Sie all die anderen Attribute, wie, oder Sie verlieren Sie.InformationsquelleAutor xbakesx
Jedes mal, wenn Sie den Umgang mit Typen, es ist ziemlich einfach, die Arbeit mit Statik. Und, wenn Sie wünschen bestimmte Dinge geschehen, basierend auf einer "trigger" - ich würde empfehlen, immer die Ereignis-basierte Programmierung ... die Absichten sind im wesentlichen die Standard - "event" in Android (für die übergabe von Daten in Ihrer Veranstaltung sicherzustellen, dass das Objekt implementiert die Parcelable-Schnittstelle).
Gibt es viele viele Beispiele dieser Konzepte auf den verschiedenen Foren und SDK-Dokumentation.
InformationsquelleAutor BonanzaDriver