Mit Watch Face Push kann Ihre App Zifferblätter auf einem Wear OS-Gerät verwalten. Dazu gehören das Hinzufügen, Aktualisieren und Entfernen von Zifferblättern sowie das Festlegen des aktiven Zifferblatts. Konfiguriere deine Wear OS App für die Verwendung der Watch Face Push API.
Einrichten
Fügen Sie die Abhängigkeit androidx.wear.watchfacepush:watchfacepush in Ihre build.gradle.kts-Datei ein.
Fügen Sie zum AndroidManifest.xml Folgendes hinzu:
<!-- Required to use the Watch Face Push API. --> <uses-permission android:name="com.google.wear.permission.PUSH_WATCH_FACES" />
Referenz zur Manager-Instanz abrufen
WatchFacePushManager-Instanz abrufen:
val watchFacePushManager = WatchFacePushManagerFactory.createWatchFacePushManager(context)
WatchFacePushManager bietet Zugriff auf alle Methoden für die Interaktion mit Watch Face Push.
Mit Slots arbeiten
Ein wichtiges Konzept bei der Verwendung von Watch Face Push sind Slots. Slots sind eine Möglichkeit, auf installierte Zifferblätter zuzugreifen, die zu Ihrer Anwendung gehören. Das System legt eine maximale Anzahl von Slots fest, die ein Marktplatz haben kann. Bei Wear OS 6 liegt das Limit bei 1.
Beim Aktualisieren oder Entfernen eines Zifferblatts wird slotId verwendet, um das Zifferblatt zu identifizieren, auf das sich der Vorgang bezieht.
Zifferblätter auflisten
Verwenden Sie listWatchFaces(), um die installierten Zifferblätter aufzulisten:
val response = watchFacePushManager.listWatchFaces() val installedList = response.installedWatchFaceDetails installedList.forEach { Log.i(TAG, "Installed watchface: ${it.packageName}") } val remainingSlots = response.remainingSlotCount Log.i(TAG, "Remaining slots: $remainingSlots")
So können Sie feststellen, ob der Slot verfügbar ist oder ob das vorhandene Zifferblatt ersetzt werden muss, um ein weiteres hinzuzufügen. Die Liste enthält auch Details zum installierten Zifferblatt. So prüfen Sie beispielsweise, ob ein bestimmtes Zifferblattpaket installiert ist:
suspend fun isInstalled(packageName: String) = watchFacePushManager.listWatchFaces() .installedWatchFaceDetails.any { it.packageName == packageName }
Zifferblatt hinzufügen
Wenn gemäß der listWatchFaces-Antwort Slots verfügbar sind, sollte die addWatchFace()-Methode verwendet werden:
try { // Supply the validation token along with the watch face package data itself. val slot = watchFacePushManager.addWatchFace(parcelFileDescriptor, token) Log.i(TAG, "${slot.packageName} (${slot.versionCode}) added in slot ${slot.slotId}") } catch (e: WatchFacePushManager.AddWatchFaceException) { Log.e(TAG, "Something went wrong installing the watch face", e) }
Zifferblatt aktualisieren
Wenn Sie ein Zifferblatt aktualisieren, können Sie den Inhalt eines bestimmten Slots durch ein neues Paket ersetzen. Das kann entweder ein Upgrade des Zifferblatts auf eine neuere Version oder ein vollständiger Austausch des Zifferblatts sein.
// Replacing the com.example.watchfacepush.green watch face with // com.example.watchfacepush.red val slotId = watchFacePushManager.listWatchFaces().installedWatchFaceDetails .firstOrNull { it.packageName == "com.example.watchfacepush.green" }?.slotId ?: throw IllegalArgumentException("No green watch face found") try { watchFacePushManager.updateWatchFace(slotId, redParcelFileDesc, redValidationToken) } catch (e: WatchFacePushManager.UpdateWatchFaceException) { Log.e(TAG, "Something went wrong updating the watch face", e) }
Zifferblatt entfernen
So entfernen Sie ein Zifferblatt:
// Remove the com.example.watchfacepush.green watch face. val slotId = watchFacePushManager.listWatchFaces().installedWatchFaceDetails .firstOrNull { it.packageName == "com.example.watchfacepush.green" }?.slotId ?: throw IllegalArgumentException("No green watch face found") try { watchFacePushManager.removeWatchFace(slotId) } catch (e: WatchFacePushManager.RemoveWatchFaceException) { Log.e(TAG, "Something went wrong removing the watch face", e) }
So ist Ihr Zifferblatt immer in der Systemauswahl für Zifferblätter zu finden. Sie können Ihr Logo gut sichtbar präsentieren und sogar eine Schaltfläche einfügen, über die Ihre Marketplace-App auf dem Smartphone gestartet wird.
Prüfen, ob Ihr Zifferblatt aktiv ist
Es ist wichtig, festzustellen, ob das aktive Zifferblatt in Ihrem Marketplace festgelegt ist, um dem Nutzer eine reibungslose Nutzung zu ermöglichen: Wenn das aktive Zifferblatt bereits im Marketplace festgelegt ist und der Nutzer ein anderes Zifferblatt auswählen möchte, muss er das aktuelle Zifferblatt nur über die Marketplace-App ersetzen, damit die Änderung wirksam wird. Wenn auf dem Marktplatz jedoch nicht das aktive Zifferblatt festgelegt ist, muss die Smartphone-App dem Nutzer weitere Informationen bieten. Weitere Informationen dazu, wie Sie diese Nutzererfahrung handhaben, finden Sie im Abschnitt zur Smartphone-App.
So ermitteln Sie, ob auf dem Marktplatz das aktive Zifferblatt festgelegt ist:
suspend fun hasActiveWatchFace() = watchFacePushManager.listWatchFaces() .installedWatchFaceDetails .any { watchFacePushManager.isWatchFaceActive(it.packageName) }
Standardzifferblatt bereitstellen
Mit Watch Face Push können Sie ein Standardzifferblatt installieren, wenn Ihre Marketplace-App installiert wird. Dadurch wird das Standardzifferblatt nicht automatisch als aktiv festgelegt (siehe Aktives Zifferblatt festlegen), aber Ihr Zifferblatt wird in der Systemauswahl für Zifferblätter verfügbar.
Wenn du diese Funktion verwenden möchtest, geh so vor:
- Fügen Sie in den Build Ihrer Wear OS App das Standard-Zifferblatt in den Pfad ein:
assets/default_watchface.apk Fügen Sie Ihrer
AndroidManifest.xmlden folgenden Eintrag hinzu:<meta-data android:name="com.google.android.wearable.marketplace.DEFAULT_WATCHFACE_VALIDATION_TOKEN" android:value="@string/default_wf_token" />
Aktives Zifferblatt festlegen
Mit dem Watch Face Push kann die Marketplace-App das aktive Zifferblatt festlegen.
Das bedeutet konkret, dass die App das aktive Zifferblatt auf eines festlegen kann, das zum Marketplace gehört, wenn das aktuelle aktive Zifferblatt nicht zum Marketplace gehört. Wenn das aktive Zifferblatt bereits auf dem Marktplatz verfügbar ist, wird es durch einen Aufruf von updateWatchFace geändert. Dabei wird der Inhalt des Zifferblatt-Slots durch ein anderes Zifferblatt ersetzt.
Das aktive Zifferblatt wird in zwei Schritten festgelegt:
- Die für das Festlegen des aktiven Zifferblatts erforderliche Android-Berechtigung wird angefordert.
- Rufen Sie die Methode
setWatchFaceAsActiveauf.
Berechtigungen zum Festlegen des aktiven Zifferblatts erhalten
Die erforderliche Berechtigung ist SET_PUSHED_WATCH_FACE_AS_ACTIVE. Sie muss Ihrem Manifest hinzugefügt werden:
<!-- Required to be able to call the setWatchFaceAsActive() method. --> <uses-permission android:name="com.google.wear.permission.SET_PUSHED_WATCH_FACE_AS_ACTIVE" />
Da es sich um eine Laufzeitberechtigung handelt, muss Ihre App diese Berechtigung vom Nutzer anfordern, wenn die App ausgeführt wird. Die Accompanist-Bibliothek kann Ihnen dabei helfen.
Zifferblatt als aktiv festlegen
Nachdem die Berechtigung erteilt wurde, rufen Sie setWatchFaceAsActive mit der Slot-ID des Zifferblatts auf, das aktiv sein soll.
Wenn diese Methode verwendet wurde, sollte Ihre Smartphone-App stattdessen eine Anleitung zum manuellen Festlegen des aktiven Zifferblatts enthalten.
Zusätzliche Metadaten aus dem APK des Zifferblatts lesen
Das WatchFaceSlot-Objekt bietet auch die Möglichkeit, zusätzliche Informationen abzurufen, die Sie auf Ihrem Zifferblatt deklarieren können.
Das kann besonders in Szenarien nützlich sein, in denen Sie kleinere Varianten desselben Zifferblatts haben. Sie könnten beispielsweise ein Zifferblatt so definieren:
- Paketname:
com.myapp.watchfacepush.mywatchface - Paketversion:
1.0.0
Dieses Zifferblatt kann jedoch als vier verschiedene APKs vorliegen, die alle fast identisch sind, aber unterschiedliche Standardfarben haben: Rot, Gelb, Grün und Blau, die in einem ColorConfiguration im Watch Face-Format-XML festgelegt sind.
Diese geringfügige Abweichung wird dann in jedem der vier APKs berücksichtigt:
<!-- For watch face com.myapp.watchfacepush.mywatchface --> <property android:name="default_color" android:value="red" />
Mithilfe eines benutzerdefinierten Attributs kann Ihre App ermitteln, welche dieser Varianten installiert ist:
val color = watchFaceDetails .getMetaData("com.myapp.watchfacepush.mywatchface.default_color") .invoke() Log.i(TAG, "Default color: $color")
Wissenswertes
Wichtige Aspekte bei der Implementierung von Watch Face Push in Ihrer App sind der Stromverbrauch, das Caching, das Aktualisieren von gebündelten Zifferblättern und die Bereitstellung eines repräsentativen Standardzifferblatts.
Leistung
Ein wichtiger Aspekt für jede App, die unter Wear OS ausgeführt wird, ist der Stromverbrauch. Für die Wear OS-Komponente Ihrer Marketplace-App:
- Ihre App sollte so selten wie möglich ausgeführt werden, es sei denn, der Nutzer interagiert direkt mit ihr. Dazu gehören:
- Minimieren des Aufweckens der App über die Telefon App
- Ausführung von WorkManager-Jobs minimieren
- Analytics-Berichte nur dann erstellen, wenn die Smartwatch geladen wird:
- Wenn Sie Nutzungsstatistiken aus der Wear OS-App oder andere Messwerte melden möchten, verwenden Sie WorkManager mit der Einschränkung
requiresCharging.
- Wenn Sie Nutzungsstatistiken aus der Wear OS-App oder andere Messwerte melden möchten, verwenden Sie WorkManager mit der Einschränkung
- Updates planen, wenn die Smartwatch aufgeladen wird und WLAN verwendet:
- Du kannst die Versionen der installierten Zifferblätter prüfen und sie automatisch aktualisieren lassen. Verwenden Sie auch hier die Einschränkung
requiresChargingund den NetzwerktypUNMETEREDfürrequiresNetworkType. - Wenn das Gerät geladen wird, hat es wahrscheinlich Zugriff auf WLAN. WLAN anfordern, um die aktualisierten APKs schnell herunterzuladen, und das Netzwerk nach Abschluss freigeben.
- Diese Anleitung gilt auch für den Fall, dass der Marktplatz ein Zifferblatt des Tages anbietet. Lade es vorab herunter, während die Smartwatch geladen wird.
- Du kannst die Versionen der installierten Zifferblätter prüfen und sie automatisch aktualisieren lassen. Verwenden Sie auch hier die Einschränkung
- Keine Jobs zum Prüfen des aktiven Zifferblatts planen:
- Das regelmäßige Prüfen, ob auf Ihrem Marktplatz noch das aktive Zifferblatt vorhanden ist und welches Zifferblatt es ist, belastet den Akku. Wir raten aber dringend davon ab.
- Benachrichtigungen auf der Smartwatch nicht verwenden:
- Wenn Ihre App Benachrichtigungen verwendet, sollten diese auf dem Smartphone angezeigt werden. Durch die Nutzeraktion wird die Smartphone-App geöffnet, um den Vorgang fortzusetzen. Konfiguriere Benachrichtigungen so, dass sie nicht an die Smartwatch-App weitergeleitet werden, indem du
setLocalOnlyverwendest.
- Wenn Ihre App Benachrichtigungen verwendet, sollten diese auf dem Smartphone angezeigt werden. Durch die Nutzeraktion wird die Smartphone-App geöffnet, um den Vorgang fortzusetzen. Konfiguriere Benachrichtigungen so, dass sie nicht an die Smartwatch-App weitergeleitet werden, indem du
Caching läuft...
Im kanonischen Marketplace-Beispiel werden Zifferblätter vom Smartphone auf die Smartwatch übertragen. Diese Verbindung ist in der Regel eine Bluetooth-Verbindung, die recht langsam sein kann.
Um sowohl eine bessere Nutzerfreundlichkeit zu bieten als auch die Sendeleistung zu schonen, solltest du auf dem Wear OS-Gerät einen kleinen Cache implementieren, in dem einige APKs gespeichert werden.
Wenn der Nutzer ein anderes Zifferblatt ausprobiert, sich dann aber entscheidet, zum zuvor ausgewählten Zifferblatt zurückzukehren, erfolgt diese Aktion fast sofort.
Dies kann auch für das Vorab-Caching für das Zifferblatt des Tages oder ähnliche Schemata verwendet werden, bei denen Zifferblätter heruntergeladen werden, während das Wear OS-Gerät geladen wird.
Vorinstallierte Zifferblätter aktualisieren
Ihre App kann ein Standard-Zifferblatt-Asset enthalten, wie oben beschrieben. Es ist wichtig zu wissen, dass das Zifferblatt zwar im System installiert wird, wenn Ihre Marketplace-App installiert wird, aber nicht aktualisiert wird, wenn eine neuere Version mit einem Update Ihrer Marketplace-App gebündelt wird.
Um diese Situation zu bewältigen, sollte Ihre Marketplace-App auf die Broadcast-Aktion MY_PACKAGE_REPLACED warten und prüfen, ob ein gebündeltes Zifferblatt aus Paket-Assets aktualisiert werden muss.
Repräsentatives Standardzifferblatt
Ein Standardzifferblatt ist eine gute Möglichkeit, Nutzern zu helfen, Ihren Marketplace zu entdecken und zu verwenden: Das Zifferblatt wird installiert, wenn Ihr Marketplace installiert wird. Nutzer können es also in der Zifferblattgalerie finden.
Einige Überlegungen bei der Verwendung von Standard-Zifferblättern:
- Verwende
removeWatchFacenicht, wenn der Nutzer ein Zifferblatt aus deiner Marketplace-App deinstalliert. Stelle in diesem Fall stattdessen das Standardzifferblatt mitupdateWatchFacewieder her. So können Nutzer dein Zifferblatt in der Galerie leichter finden und einrichten. - Das Standard-Zifferblatt sollte einfach und durch Ihr Logo und Design sofort erkennbar sein. So können Nutzer das Zifferblatt in der Zifferblattgalerie leichter finden.
Fügen Sie dem Standardzifferblatt eine Schaltfläche hinzu, um die Telefon App zu öffnen. Dies kann in zwei Schritten erfolgen:
Fügen Sie dem Zifferblatt ein
Launch-Element hinzu, um einen Intent über die Wear OS App zu starten, z. B.:<Launch target="com.myapp/com.myapp.LaunchOnPhoneActivity" />Starten Sie in
LaunchOnPhoneActivitydie Telefon App mitRemoteActivityHelper.