Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android

Codieren Sie ein Widget für Ihre Android-App: Aktualisieren des Widgets

by
Difficulty:BeginnerLength:LongLanguages:

German (Deutsch) translation by Tatsiana Bochkareva (you can also view the original English article)

Anwendungs-Widgets bieten Ihren Benutzern einen einfachen Zugriff auf die am häufigsten verwendeten Funktionen Ihrer Anwendung, während Ihre App auf dem Startbildschirm des Benutzers angezeigt wird. Durch Hinzufügen eines Widgets zu Ihrem Projekt können Sie eine bessere Benutzererfahrung bieten und die Benutzer dazu ermutigen, sich weiterhin mit Ihrer Anwendung zu beschäftigen, da sie jedes Mal, wenn sie auf ihren Startbildschirm blicken, Ihr Widget sehen und einige der nützlichsten und nützlichsten Ihrer App anzeigen interessanter Inhalt.

Im ersten Beitrag haben wir ein Widget erstellt, das Daten abruft und anzeigt und eine eindeutige Aktion als Reaktion auf onClick-Ereignisse ausführt.

Im ersten Beitrag haben wir ein Widget erstellt, das Daten abruft und anzeigt und eine eindeutige Aktion als Reaktion auf onClick-Ereignisse ausführt. In unserem Widget fehlt jedoch noch eine wichtige Funktionalität: Es wird niemals mit neuen Informationen aktualisiert. Ein Widget, das nie etwas Neues zu bieten hat, ist nicht allzu nützlich. Daher bieten wir unserem Widget zwei verschiedene Möglichkeiten zum Aktualisieren.

Bis zum Ende dieser Serie haben wir unser Widget erweitert, um neue Daten automatisch basierend auf einem Zeitplan und als Reaktion auf Benutzerinteraktionen abzurufen und anzuzeigen.

Wir setzen genau dort an, wo wir aufgehört haben. Wenn Sie also keine Kopie des Widgets haben, das wir im ersten Beitrag erstellt haben, können Sie es von GitHub herunterladen.

Aktualisieren Sie Ihr Layout

Der erste Schritt ist die Aktualisierung unseres Layouts, um einige Daten anzuzeigen, die sich im Laufe der Zeit ändern. Damit wir genau sehen können, wann unser Widget jedes Update erhält, werde ich das Widget anweisen, die aktuelle Uhrzeit abzurufen und anzuzeigen, wenn es ein Update ausführt.

Ich werde dem Widget-Layout Folgendes hinzufügen:

  • Eine TextView, in der die Bezeichnung Letzte Aktualisierung angezeigt wird
  • Eine TextView, die den Zeitpunkt der letzten Aktualisierung anzeigt

Während wir an der Datei new_app_widget.xml arbeiten, werde ich auch die TextView hinzufügen, mit der der Benutzer möglicherweise ein Update manuell auslösen kann:

Definieren Sie als Nächstes die neuen Zeichenfolgenressourcen, auf die wir in unserem Layout verweisen:

Der @string/time unterscheidet sich von Ihrem typischen String, da er nur ein Platzhalter ist, der zur Laufzeit ersetzt wird.

Dies gibt uns das fertige Layout:

Preview the complete Android application widget layout

Aktualisieren Ihres Widgets basierend auf einem Zeitplan

Da dies die am einfachsten zu implementierende Methode ist, werde ich zunächst unser Widget nach Ablauf einer festgelegten Zeit automatisch aktualisieren.

Bei der Erstellung eines solchen automatischen Aktualisierungsplans sind 1.800.000 Millisekunden (30 Minuten) das kleinste Intervall, das Sie verwenden können. Selbst wenn Sie updatePeriodMillis Ihres Projekts auf weniger als 30 Minuten einstellen, wird Ihr Widget nur einmal alle halbe Stunde aktualisiert.

Die Entscheidung, wie oft Ihr Widget aktualisiert werden soll, ist nie einfach. Häufige Updates belasten den Akku des Geräts stärker. Wenn Sie diese Updates jedoch zu weit voneinander entfernt einstellen, zeigt Ihr Widget dem Benutzer möglicherweise erheblich veraltete Informationen an.

Um eine Balance zu finden, die für Ihr bestimmtes Projekt geeignet ist, müssen Sie Ihr Widget über eine Reihe von Aktualisierungsfrequenzen testen und die Auswirkungen jeder Frequenz auf die Akkulaufzeit messen. Gleichzeitig müssen Sie überwachen, ob der Inhalt des Widgets jemals merklich veraltet ist.

Da es sich bei einer der frustrierenden, subjektiven Fragen, bei denen es keine „richtige“ Antwort gibt, um eine häufige Meinung handelt, kann es hilfreich sein, eine zweite Meinung einzuholen, indem einige Benutzertests durchgeführt werden. Sie können sogar einige A / B-Tests einrichten, um zu überprüfen, ob bestimmte Aktualisierungsfrequenzen positiver empfangen werden als andere.

Öffnen Sie die AppWidgetProviderInfo-Datei Ihres Projekts (res/xml/new_app_widget_info.xml) und Sie werden sehen, dass bereits ein Standardaktualisierungsintervall von 86.400.000 Millisekunden (24 Stunden) definiert ist.

Es gibt viele Widgets, die nur einmal alle 24 Stunden aktualisiert werden. Beispielsweise muss ein Widget, das die Wettervorhersage anzeigt, möglicherweise nur einmal pro Tag neue Informationen abrufen. Selbst wenn Ihr Widget nur einmal pro Tag aktualisiert werden muss, ist dies beim Testen Ihrer App nicht ideal. Niemand möchte 24 Stunden warten, um zu sehen, ob die onUpdate() -Methode korrekt ausgelöst wird. Daher verwenden Sie normalerweise das kürzestmögliche Intervall, wenn Sie erste Tests durchführen, und ändern diesen Wert später, falls erforderlich.

Um das Testen unserer App zu vereinfachen, verwende ich das kleinstmögliche Intervall:

Abrufen und Anzeigen der aktuellen Uhrzeit

Die onUpdate() -Methode ist dafür verantwortlich, die Views Ihres Widgets mit neuen Informationen zu aktualisieren. Wenn Sie den Widget-Anbieter Ihres Projekts (java/values/NewAppWidget.java) öffnen, werden Sie feststellen, dass er bereits den Umriss einer onUpdate() -Methode enthält:

Unabhängig davon, ob Ihr Widget automatisch oder als Reaktion auf Benutzerinteraktionen aktualisiert wird, ist der Aktualisierungsprozess genau derselbe: Der Widget-Manager sendet eine Broadcast-Absicht mit der Aktion ACTION_APPWIDGET_UPDATE, und die Widget-Provider-Klasse antwortet mit dem Aufruf der Methode onUpdate() Ruft wiederum die Hilfsmethode updateAppWidget() auf.

Sobald wir unsere NewAppWidget.java-Klasse aktualisiert haben, um die aktuelle Uhrzeit abzurufen und anzuzeigen, verwendet unser Projekt denselben Codeabschnitt, unabhängig davon, wie die onUpdate() -Methode ausgelöst wird:

Es gibt ein Problem mit dem obigen Code: Wenn der Benutzer innerhalb einer Minute mehrmals auf die TextView tippt, gibt es keinen visuellen Hinweis darauf, dass das Widget aktualisiert wurde, nur weil keine neue Zeit zum Anzeigen vorhanden ist. Dies wird wahrscheinlich keine Probleme für Ihre Endbenutzer verursachen, die wahrscheinlich nicht dort sitzen, mehrmals pro Minute auf die TextView tippen und sich fragen, warum sich die Zeit nicht geändert hat. Dies kann jedoch beim Testen Ihrer App ein Problem sein, da Sie zwischen dem Auslösen der onUpdate() -Methode mindestens 60 Sekunden warten müssen.

Um sicherzustellen, dass immer eine visuelle Bestätigung vorliegt, dass die onUpdate() -Methode erfolgreich ausgeführt wurde, werde ich bei jedem Aufruf von onUpdate() einen Toast anzeigen:

Test that the widget is updating correctly by including a toast

Aktualisieren Ihres Widgets als Reaktion auf Benutzeraktionen

Unser Widget wird jetzt automatisch alle halbe Stunde aktualisiert. Wie sieht es jedoch mit der Aktualisierung als Reaktion auf Benutzerinteraktionen aus?

Wir haben bereits viele Grundlagen geschaffen, indem wir unserem Layout einen Tipp zum Aktualisieren von TextView hinzugefügt und die Klasse NewAppWidget.java erweitert haben, um die aktuelle Uhrzeit abzurufen und anzuzeigen, wenn onUpdate() aufgerufen wird.

Sie müssen nur noch eine Intent mit AppWidgetManager.ACTION_APPWIDGET_UPDATE erstellen. Hierbei handelt es sich um eine Aktion, die das Widget über die Aktualisierung informiert und diese Absicht als Reaktion auf den Benutzer aufruft, der mit der TextView "Zum Aktualisieren tippen" interagiert.

Hier ist die abgeschlossene NewAppWidget.java-Klasse:

Die Möglichkeit, ein Widget bei Bedarf zu aktualisieren, kann beim Testen Ihres Projekts von unschätzbarem Wert sein, da Sie nie warten müssen, bis das Aktualisierungsintervall abgelaufen ist. Auch wenn Sie diese Funktionalität nicht in Ihre fertige Anwendung aufnehmen, möchten Sie möglicherweise eine temporäre Schaltfläche "Zum Aktualisieren tippen" hinzufügen, um Ihnen das Testen Ihres Projekts zu erleichtern.

Erstellen eines Vorschaubildes

Unser Widget sieht jetzt völlig anders aus als das Widget, das Android Studio automatisch für uns generiert hat, verwendet jedoch derzeit noch das automatisch generierte Vorschaubild.

Create a unique Android app widget preview image

Im Idealfall sollte Ihr Vorschaubild Benutzer dazu ermutigen, Ihr Widget aus der Widget-Auswahl auszuwählen, aber zumindest sollte es eine genaue Darstellung des tatsächlichen Aussehens Ihres Widgets sein! Derzeit aktiviert unser Vorschaubild keines dieser Kästchen, daher müssen wir ein neues erstellen.

Am einfachsten ist es, die im Android-Emulator enthaltene Widget-Vorschau-Anwendung zu verwenden.

Erstellen einer Widget-Vorschau

Installieren Sie Ihr Projekt zunächst auf einem Android Virtual Device(AVD). Öffnen Sie dann die App-Schublade des AVD und starten Sie die Widget-Vorschau-Anwendung. Die AVD zeigt eine Liste aller auf dem Gerät installierten Apps an. Wählen Sie Ihre App aus der Liste aus.

Ihr Widget wird auf einem leeren Hintergrund angezeigt. Nehmen Sie sich etwas Zeit, um die Größe Ihres Widgets zu ändern und es so zu optimieren, dass es optimal aussieht. Wenn Sie mit den Ergebnissen zufrieden sind, wählen Sie "Schnappschuss erstellen". Der Screenshot wird als PNG im Download-Ordner der AVD gespeichert. Um diese Datei abzurufen, wechseln Sie zurück zu Android Studio und öffnen Sie den Gerätedateiexplorer, indem Sie in der Symbolleiste Ansicht > Werkzeugfenster > Gerätedateiexplorer auswählen. Navigieren Sie in der Ansicht "Gerätedatei-Explorer" zum Ordner sdcard/download, in dem Sie das als [app_name]_ori_[orientation].png gespeicherte Vorschaubild finden.

Create a preview image using the Android Virtual Devices built-in Widget Preview app

Ziehen Sie dieses Bild aus Android Studio und legen Sie es an einem leicht zugänglichen Ort ab, z. B. auf Ihrem Desktop. Geben Sie dem Bild einen aussagekräftigeren Namen und ziehen Sie das Bild per Drag & Drop in den drawable ordner Ihres Projekts. Jetzt können Sie die AppWidgetProviderInfo-Datei (in diesem Fall new_app_widget_info.xml) öffnen und die folgende Zeile ändern, um auf Ihr neues Vorschaubild zu verweisen:

Schließlich können Sie die unnötige example_appwidget_preview entfernen, die aus Ihrem Projekt gezeichnet werden kann.

Testen Sie Ihr Widget

Es ist Zeit, das fertige Widget zu testen!

Installieren Sie zunächst das aktualisierte Projekt auf Ihrem physischen Android-Gerät oder AVD. Entfernen Sie alle vorhandenen Instanzen dieses Widgets von Ihrem Startbildschirm, damit Sie wissen, dass Sie mit der neuesten Version arbeiten.

Um Ihr Widget hinzuzufügen, drücken Sie auf eine beliebige Stelle auf dem Startbildschirm, tippen Sie auf Widget und wählen Sie dann Ihr Widget aus. Sie haben die Möglichkeit, die Größe des Widgets nach Bedarf zu ändern und neu zu positionieren.

Der Wert für die letzte Aktualisierung zeigt die Zeit an, zu der Sie dieses Widget erstellt haben. Drücken Sie zum Aktualisieren auf Tippen. Das Widget sollte einen Toast und eine neue Zeit anzeigen. Wenn Sie eine zweite Instanz des Widgets auf Ihrem Homescreen platzieren, sollte eine andere Zeit als die erste angezeigt werden.

Create multiple instances of the same application widget

Sie können eine dieser Widget-Instanzen aktualisieren, indem Sie auf Tap to Update TextView tippen. Wenn Sie eine manuelle Aktualisierung für das erste Widget auslösen, wird das zweite Widget nicht aktualisiert und umgekehrt.

Zusätzlich zu manuellen Updates aktualisiert der App Widget Manager alle Instanzen Ihres Widgets alle 30 Minuten, basierend auf dem Zeitpunkt, zu dem Sie die erste Instanz erstellt haben. Obwohl manuelle Aktualisierungen dazu führen können, dass Instanzen unterschiedliche Zeiten anzeigen, werden alle Instanzen alle halbe Stunde gleichzeitig aktualisiert. Zu diesem Zeitpunkt werden sie zur gleichen Zeit angezeigt.

Möglicherweise möchten Sie einige Instanzen dieses Widgets auf Ihrem Startbildschirm behalten, damit Sie überwachen können, wie sich der Inhalt im Laufe der Zeit als Reaktion auf eine Kombination aus automatischen und manuellen Updates ändert.

Abschluss

In dieser Serie haben wir ein Android-Anwendungs-Widget erstellt, das zeigt, wie die häufigsten Funktionen von App-Widgets implementiert werden. Wenn Sie von Anfang an mitverfolgt haben, haben Sie zu diesem Zeitpunkt ein Widget erstellt, das automatisch und als Reaktion auf Benutzereingaben aktualisiert wird und auf onClick-Ereignisse reagieren kann (Sie können auch das gesamte Projekt von GitHub herunterladen).

Im nächsten Beitrag werden einige bewährte Methoden vorgestellt, um sicherzustellen, dass Ihr Widget eine gute Benutzererfahrung bietet, und wie Sie Ihr Widget mit einer Konfigurationsaktivität erweitern können.

Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.