Netzwerkzugriff und -synchronisierung unter Wear OS

Mit Wear OS by Google kann eine Smartwatch direkt mit einem Netzwerk kommunizieren, ohne auf ein Android- oder iOS-Smartphone zugreifen zu müssen. Die Data Layer API darf nicht verwendet werden, um eine Wear OS-App mit einem Netzwerk zu verbinden. Folgen Sie stattdessen den Richtlinien und Schritten in diesem Leitfaden.

Netzwerkzugriff

Wear OS-Apps können Netzwerkanfragen senden. Wenn eine Smartwatch über Bluetooth mit einem Smartphone verbunden ist, wird der Netzwerkverkehr der Smartwatch in der Regel über das Smartphone weitergeleitet.

Wenn ein Smartphone nicht verfügbar ist, werden je nach Hardware der Uhr WLAN und Mobilfunknetze verwendet. Über die Wear OS-Plattform werden Übergänge zwischen Netzwerken gehandhabt.

Sie können Protokolle wie HTTP, TCP und UDP verwenden. Die android.webkit APIs, einschließlich der Klasse CookieManager, sind jedoch nicht verfügbar. Sie können Cookies verwenden, indem Sie Header bei Anfragen und Antworten lesen und schreiben.

Wir empfehlen außerdem, die WorkManager API für asynchrone Anfragen zu verwenden, einschließlich der regelmäßigen Abfrage.

Wenn Sie eine Verbindung zu bestimmten Netzwerktypen herstellen müssen, finden Sie weitere Informationen unter Netzwerkstatus lesen.

Netzwerkzugriff mit hoher Bandbreite

Die Wear OS-Plattform verwaltet die Netzwerkverbindung mit dem Ziel, die Nutzerfreundlichkeit insgesamt zu optimieren. Die Plattform wählt das aktive Standardnetzwerk aus, indem zwei Anforderungen in Einklang gebracht werden:

  • Lange Akkulaufzeit
  • Netzwerkbandbreite

Wenn der Akku geschont wird, hat das aktive Netzwerk möglicherweise nicht genügend Bandbreite für Netzwerkaufgaben wie das Transportieren großer Dateien oder das Streamen von Medien.

Dieser Abschnitt enthält eine Anleitung zur Verwendung der Klasse ConnectivityManager, mit der Sie dafür sorgen können, dass Ihre Anwendung die benötigte Netzwerkbandbreite hat. Allgemeine Informationen zur fein abgestimmten Steuerung von Netzwerkressourcen finden Sie unter Netzwerknutzung verwalten.

WLAN-Verbindung anfordern

Fordern Sie für Anwendungsfälle, die einen Netzwerkzugriff mit hoher Bandbreite erfordern, z. B. zum Übertragen großer Dateien oder Streaming Media, eine Verbindung über eine Übertragung mit hoher Bandbreite an, z. B. WLAN. Dies wird im folgenden Beispiel gezeigt:

Kotlin

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network)
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
}
connectivityManager.requestNetwork(
    NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
    callback
)

Java

ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
    public void onAvailable(Network network) {
        super.onAvailable(network);
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network);
    }

    public void onLost(Network network) {
        super.onLost(network);
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
};
connectivityManager.requestNetwork(
        new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
);

Die Aufnahme eines Netzwerks erfolgt möglicherweise nicht unverzüglich, da die WLAN- oder Mobilfunkverbindung einer Uhr möglicherweise deaktiviert ist, um den Akku zu schonen. Wenn die Uhr keine Verbindung zu einem Netzwerk herstellen kann, wird die Methode onAvailable() Ihrer NetworkCallback-Instanz nicht aufgerufen.

Nachdem onAvailable() aufgerufen wurde, versucht das Gerät, mit dem WLAN verbunden zu bleiben, bis NetworkCallback freigegeben wird. Wenn du kein WLAN mehr benötigst, kannst du den Callback wie im folgenden Beispiel freigeben, um die Akkulaufzeit zu verlängern.

Kotlin

connectivityManager.bindProcessToNetwork(null)
connectivityManager.unregisterNetworkCallback(callback)

Java

connectivityManager.bindProcessToNetwork(null);
connectivityManager.unregisterNetworkCallback(callback);

Aktivität „WLAN-Einstellungen“ starten

Wenn ein WLAN angefordert wird, versucht das System, eine Verbindung zu einem gespeicherten Netzwerk herzustellen, wenn eines konfiguriert ist und sich in Reichweite befindet. Wenn kein gespeichertes WLAN verfügbar ist, wird die Callback-Methode onAvailable() der Instanz NetworkCallback nicht aufgerufen.

Wenn du Handler für die Zeitüberschreitung der Netzwerkanfrage verwendest, kannst du den Nutzer anweisen, ein WLAN hinzuzufügen, wenn das Zeitlimit überschritten wird. Leiten Sie den Nutzer mit dem folgenden Intent direkt zur Aktivität zum Hinzufügen eines WLAN-Netzwerks weiter:

Kotlin

context.startActivity(Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"))

Java

context.startActivity(new Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"));

Damit deine App die Aktivität „Einstellungen“ starten kann, benötigt sie die folgende Berechtigung: android.permission.CHANGE_WIFI_STATE.

Hinweise zur Benutzeroberfläche

Wenn deine App für einen Betrieb mit hoher Bandbreite eine Verbindung zu einem neuen WLAN benötigt, vergewissere dich, dass der Grund für die Verbindung dem Nutzer klar ist, bevor du die WLAN-Einstellungen startest. Fordere den Nutzer nur dann an, ein neues WLAN hinzuzufügen, wenn ein Netzwerk mit hoher Bandbreite erforderlich ist. Du solltest den Nutzer nicht daran hindern, auf App-Funktionen zuzugreifen, die kein Netzwerk mit hoher Bandbreite erfordern.

Abbildung 1 zeigt eine Musik-App. Die App ermöglicht es dem Nutzer, Musik in einem Netzwerk mit geringerer Bandbreite zu suchen. Der Nutzer muss nur ein neues WLAN hinzufügen, wenn er Musik herunterladen oder streamen möchte.

Musik wird heruntergeladen

Abbildung 1: Ein Ablauf zum Herunterladen von Musik in einer Musik-App.

Überlegungen zu Stromversorgung und Datennutzung

Verschiebe alle unwichtigen Netzwerkaufgaben wie Analyseberichte oder Protokollerfassung, bis das Wear OS-Gerät wieder eine Bluetooth- oder WLAN-Verbindung hergestellt hat, um die Akkulaufzeit zu verlängern und die mobile Datennutzung zu minimieren.

Cloud-Messaging

Apps können zum Senden von Benachrichtigungen direkt Firebase Cloud Messaging (FCM) verwenden.

Es gibt keine Wear OS-spezifischen APIs für den Netzwerkzugriff oder FCM. Weitere Informationen finden Sie in der vorhandenen Dokumentation zum Verbinden mit einem Netzwerk und zum Cloud-Messaging.

FCM funktioniert gut mit dem Stromsparmodus und ist die empfohlene Methode, um Benachrichtigungen an eine Uhr zu senden.

Nachrichten von FCM lassen sich bereitstellen, indem beim Ausführen deiner Wear OS-App ein Registrierungstoken für ein Gerät erfasst wird. Fügen Sie dann das Token als Teil des Ziels ein, wenn Ihr Server Nachrichten an den FCM REST-Endpunkt sendet. FCM sendet Nachrichten an das durch das Token identifizierte Gerät.

Eine FCM-Nachricht hat das JSON-Format (JavaScript Object Notation) und kann eine oder beide der folgenden Nutzlasten enthalten:

  • Benachrichtigungsnutzlast: Wenn eine Benachrichtigungsnutzlast von einer Uhr empfangen wird, werden die Daten für den Nutzer direkt im Benachrichtigungsstream angezeigt. Wenn der Nutzer auf die Benachrichtigung tippt, wird die App gestartet.
  • Datennutzlast: Die Nutzlast enthält eine Reihe benutzerdefinierter Schlüssel/Wert-Paare. Die Nutzlast wird als Daten an deine Wear OS-App gesendet.

Weitere Informationen und Beispiele für Nutzlasten finden Sie unter Informationen zu FCM-Nachrichten.

Standardmäßig werden Benachrichtigungen von der App eines Smartphones auf eine Smartwatch übertragen. Wenn Sie eine eigenständige Wear OS-App und eine entsprechende Smartphone-App haben, können doppelte Benachrichtigungen auftreten. Beispielsweise könnte eine einzelne Benachrichtigung von FCM, die sowohl von einem Smartphone als auch von einer Smartwatch empfangen wird, von beiden Geräten unabhängig voneinander angezeigt werden. Dies lässt sich mithilfe von Bridging APIs verhindern.

Hintergrunddienste verwenden

Damit Hintergrundaufgaben korrekt ausgeführt werden, müssen sie den Energiesparmodus und App-Standby berücksichtigen.

Wenn sich ein Bildschirm für einen längeren Zeitraum ausschaltet oder in den Inaktivmodus wechselt, kann ein Teil des Stromsparmodus ausgeführt und Hintergrundaufgaben für bestimmte Zeiträume verschoben werden. Wenn das Gerät später längere Zeit nicht steht, tritt der Stromsparmodus regelmäßig auf. Planen Sie Anfragen mit der WorkManager API, damit sich Ihre App für die Doze-sichere Codeausführung registrieren kann.

Zeitplan mit Einschränkungen

Mithilfe von Einschränkungen können Sie Anfragen so konfigurieren, dass die Akkulaufzeit verlängert wird. Wählen Sie eine oder mehrere der folgenden Einschränkungen aus, die Sie in Ihre Anfragen aufnehmen möchten:

  • Planen Sie eine Anfrage, die ein Netzwerk erfordert. Gib an, ob NetworkType CONNECTED oder UNMETERED ist. UNMETERED ist für große Datenübertragungen, CONNECTED für kleine.
  • Anfrage während des Aufladens planen.
  • Eine Anfrage planen, während das Gerät inaktiv ist. Dies ist nützlich für Hintergrundarbeiten oder Synchronisierungen mit niedrigerer Priorität, insbesondere wenn das Gerät aufgeladen wird.

Beachte, dass einige Netzwerke mit niedriger Bandbreite, wie z. B. Bluetooth LE, als kostenpflichtig gelten.

Weitere Informationen finden Sie im WorkManager-Leitfaden Auswirkungen von Einschränkungen auf regelmäßige Arbeiten.