Auf eigenständigen Geräten direkt über ein Netzwerk kommunizieren

Mit Wear OS by Google kann eine Smartwatch direkt mit einem Netzwerk kommunizieren, ohne auf ein Android- oder iOS-Smartphone zugreifen zu müssen. Verwende die Data Layer API nicht, 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 geleitet.

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

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 in Anfragen und Antworten lesen und schreiben.

Verwenden Sie WorkManager für asynchrone Anfragen, einschließlich Abfragen in regelmäßigen Intervallen.

Weitere Informationen zum Herstellen einer Verbindung zu bestimmten Netzwerktypen finden Sie unter Netzwerkstatus lesen.

Netzwerkzugriff mit hoher Bandbreite

Die Wear OS-Plattform verwaltet die Netzwerkverbindung mit dem Ziel, die gesamte Nutzererfahrung zu optimieren. Die Plattform wählt das standardmäßig aktive Netzwerk aus, indem sie zwei Anforderungen ausgleicht: lange Akkulaufzeit und Netzwerkbandbreite.

Wenn die Akkuersparnis priorisiert wird, hat das aktive Netzwerk möglicherweise nicht genügend Bandbreite für Netzwerkaufgaben wie das Transportieren großer Dateien oder Streamingmedien.

In diesem Abschnitt wird beschrieben, wie Sie mithilfe der Klasse ConnectivityManager dafür sorgen, dass Ihre Anwendung die erforderliche Netzwerkbandbreite hat. Allgemeine Informationen zur detaillierten Steuerung von Netzwerkressourcen finden Sie unter Netzwerknutzung verwalten.

WLAN-Verbindung anfordern

Für Anwendungsfälle, die einen Netzwerkzugriff mit hoher Bandbreite erfordern, z. B. das Transportieren großer Dateien oder Streaming Media, fordern Sie eine Konnektivität mit einem Transport 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
);

Der Abruf eines Netzwerks erfolgt möglicherweise nicht unverzüglich, da die WLAN- oder Mobilfunkverbindung einer Uhr zur Verlängerung der Batterie möglicherweise deaktiviert ist. Wenn die Smartwatch keine Verbindung zu einem Netzwerk herstellen kann, wird die Methode onAvailable() der Instanz NetworkCallback nicht aufgerufen.

Nach dem Aufruf von onAvailable() versucht das Gerät, mit dem WLAN verbunden zu bleiben, bis NetworkCallback freigegeben wird. Zur Verlängerung der Akkulaufzeit kannst du den Callback wie im folgenden Beispiel gezeigt loslassen, wenn du kein WLAN mehr benötigst.

Kotlin

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

Java

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

Aktivität zu WLAN-Einstellungen starten

Bei der Anfrage eines WLAN-Netzwerks versucht das System, eine Verbindung zu einem gespeicherten Netzwerk herzustellen, sofern eines konfiguriert und in Reichweite ist. Wenn kein gespeichertes WLAN verfügbar ist, wird die Callback-Methode onAvailable der NetworkCallback-Instanz nicht aufgerufen.

Wenn Sie Handler für das Zeitlimit der Netzwerkanfrage verwenden, können Sie den Nutzer anweisen, ein WLAN hinzuzufügen, wenn das Zeitlimit erreicht ist. Leiten Sie den Nutzer mit folgendem 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"));

Zum Starten der Aktivität zu den Einstellungen benötigt deine App die Berechtigung CHANGE_WIFI_STATE.

Hinweise zur Benutzeroberfläche

Wenn Ihre App für eine hohe Bandbreite eine Verbindung zu einem neuen WLAN benötigt, achten Sie vor dem Starten der WLAN-Einstellungen darauf, dass der Grund für die Verbindung dem Nutzer klar ist. Bitten Sie den Nutzer nur dann, ein neues WLAN hinzuzufügen, wenn ein Netzwerk mit hoher Bandbreite erforderlich ist. Blockieren Sie den Nutzer nicht am Zugriff auf App-Funktionen, die kein Netzwerk mit hoher Bandbreite erfordern.

Abbildung 1 zeigt eine Musik-App. Mit der App kann der Nutzer in einem Netzwerk mit geringerer Bandbreite nach Musik suchen. Der Nutzer muss nur ein neues WLAN hinzufügen, wenn er Musik herunterladen oder streamen möchte.

Musik wird heruntergeladen

Abbildung 1: Eine Musik-App zum Herunterladen von Musik.

Überlegungen zu Energie- und Datennutzung

Um die Akkulaufzeit zu verlängern und die mobile Datennutzung zu minimieren, solltest du alle unwesentlichen Netzwerkaufgaben wie Analyseberichte oder das Erfassen von Protokollen aufschieben, bis das Wear OS-Gerät wieder eine Bluetooth- oder WLAN-Verbindung anstelle einer LTE- oder getakteten Verbindung hergestellt hat.

Cloud-Messaging

Verwenden Sie zum Senden von Benachrichtigungen direkt Firebase Cloud Messaging (FCM).

Wear OS-spezifische APIs für den Netzwerkzugriff oder FCM sind nicht verfügbar. Weitere Informationen finden Sie in der vorhandenen Dokumentation zum Herstellen einer Netzwerkverbindung und zum Cloud-Messaging.

FCM funktioniert gut mit dem Stromsparmodus und ist die empfohlene Methode zum Senden von Benachrichtigungen an eine Uhr.

Für Nachrichten von FCM muss ein Registrierungstoken für ein Gerät erfasst werden, auf dem deine Wear OS-App ausgeführt 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 liegt im JSON-Format (JavaScript Object Notation) vor und kann eine oder beide der folgenden Nutzlasten enthalten:

  • Benachrichtigungsnutzlast: Wenn eine Benachrichtigungsnutzlast von einer Uhr empfangen wird, werden die Daten einem Nutzer direkt im Benachrichtigungsstream angezeigt. Wenn der Nutzer auf die Benachrichtigung tippt, wird die App gestartet.
  • Datennutzlast: Wenn die Nutzlast eine Reihe von benutzerdefinierten Schlüssel- oder Wertpaaren hat. 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 Smartphone-App an die Smartwatch übertragen. Wenn du eine eigenständige Wear OS-App und eine entsprechende Smartphone-App hast, kann es zu doppelten Benachrichtigungen kommen. Beispielsweise kann eine einzelne Benachrichtigung von FCM, die sowohl von einem Smartphone als auch von einer Uhr empfangen wird, von beiden Geräten unabhängig angezeigt werden. Dies lässt sich mit Bridging APIs verhindern.

Hintergrunddienste verwenden

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

Wenn sich ein Bildschirm für lange genug ausschaltet oder in den Inaktivmodus wechselt, kann ein Teil des Stromsparmodus auftreten und Hintergrundaufgaben können für bestimmte Zeiträume ausgesetzt werden. Später, wenn das Gerät längere Zeit nicht steht, tritt ein regelmäßiger Stromsparmodus auf. Planen Sie Anfragen mit der WorkManager API, über die sich Ihre Anwendung für die Codeausführung für Stromsparmodus registrieren kann.

Mit Einschränkungen planen

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 für Ihre Anfragen aus:

  • Planen Sie eine Anfrage, die ein Netzwerk erfordert.

    Geben Sie an, ob NetworkType CONNECTED oder UNMETERED ist. UNMETERED ist für große Datenübertragungen gedacht, CONNECTED für kleine Übertragungen.

  • Planen Sie eine Anfrage während der Abrechnung.

  • Eine Anfrage planen, während das Gerät inaktiv ist. Dies ist nützlich für Hintergrundarbeiten oder Synchronisierungen mit niedriger Priorität, insbesondere wenn das Gerät geladen wird.

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