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

Mit Wear OS by Google kann eine Smartwatch direkt mit einem Netzwerk kommunizieren, ohne dass ein Android- oder iOS-Smartphone erforderlich ist. Verwenden Sie die Data Layer API nicht, um eine Wear OS-App mit einem Netzwerk zu verbinden. Folgen Sie stattdessen den Richtlinien und Schritten in dieser Anleitung.

Netzwerkzugriff

Wear OS-Apps können Netzwerkanfragen stellen. Wenn eine Smartwatch über eine Bluetooth-Verbindung 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 Smartwatch 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 des regelmäßigen Pollings.

Wenn Sie eine Verbindung zu bestimmten Netzwerktypen herstellen müssen, lesen Sie den Abschnitt Netzwerkstatus lesen.

Netzwerkzugriff mit hoher Bandbreite

Die Wear OS-Plattform verwaltet die Netzwerkverbindung, um eine optimale Nutzerfreundlichkeit zu bieten. Die Plattform wählt das standardmäßige aktive Netzwerk aus, indem sie zwei Anforderungen in Einklang bringt: lange Akkulaufzeit und Netzwerkbandbreite.

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

In diesem Abschnitt finden Sie Informationen zur Verwendung der Klasse ConnectivityManager, damit Ihre App die benötigte Netzwerkbandbreite erhält. Allgemeine Informationen zur detaillierten Steuerung von Netzwerkressourcen finden Sie unter Netzwerknutzung verwalten.

WLAN-Verbindung anfordern

Für Anwendungsfälle, die Netzwerkzugriff mit hoher Bandbreite erfordern, z. B. zum Übertragen großer Dateien oder zum Streamen von Medien, fordern Sie eine Verbindung mit einem Transport mit hoher Bandbreite an, z. B. WLAN. Dies wird im folgenden Beispiel veranschaulicht:

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.
    }
}

fun requestWifiNetwork() {
    connectivityManager.requestNetwork(
        NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
    )
}

Das Abrufen eines Netzwerks kann einige Zeit dauern, da das WLAN oder das Mobilfunkmodul einer Smartwatch möglicherweise deaktiviert ist, um den Akku zu schonen. Wenn die Smartwatch keine Verbindung zu einem Netzwerk herstellen kann, wird die onAvailable()-Methode Ihrer NetworkCallback-Instanz nicht aufgerufen.

Nachdem onAvailable() aufgerufen wurde, versucht das Gerät, die Verbindung zum WLAN aufrechtzuerhalten, bis NetworkCallback freigegeben wird. Um den Akku zu schonen, geben Sie den Callback frei, wenn Sie kein WLAN mehr benötigen, wie im folgenden Beispiel gezeigt.

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

WLAN-Einstellungen aufrufen

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

Wenn Sie ein Handler verwenden, um das Zeitlimit für die Netzwerkanfrage festzulegen, können Sie den Nutzer auffordern, ein WLAN hinzuzufügen, wenn das Zeitlimit erreicht wird. Senden Sie den Nutzer mit dem folgenden Intent direkt zur Aktivität zum Hinzufügen eines WLAN-Netzwerks:

val networkSettingsAction = "com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"
val intent = Intent(networkSettingsAction).apply {
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
context.startActivity(intent)

Zum Starten der Einstellungen muss Ihre App die Berechtigung CHANGE_WIFI_STATE haben.

Überlegungen zur Benutzeroberfläche

Wenn Ihre App für einen Vorgang mit hoher Bandbreite eine Verbindung zu einem neuen WLAN benötigt, sollten Sie diese nahtlos herstellen und bei Bedarf wieder trennen. Wenn kein WLAN verfügbar ist, erkläre, dass für die Funktion WLAN erforderlich ist, und biete eine Möglichkeit, die Aktivität für die WLAN-Einstellungen zu starten. Blockieren Sie den Nutzer nicht beim Zugriff auf App-Funktionen, für die kein Netzwerk mit hoher Bandbreite erforderlich ist.

Hinweise zum Strom- und Datenverbrauch

Um die Akkulaufzeit zu verlängern und die Nutzung mobiler Daten zu minimieren, sollten Sie alle nicht unbedingt erforderlichen Netzwerkaufgaben wie das Erstellen von Analytics-Berichten oder das Erfassen von Logs aufschieben, bis das Wear OS-Gerät eine Bluetooth- oder WLAN-Verbindung anstelle einer LTE- oder getakteten Verbindung wiederhergestellt hat.

Cloud-Messaging

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

Es gibt keine APIs für den Netzwerkzugriff oder FCM, die speziell für Wear OS entwickelt wurden. Weitere Informationen finden Sie in der vorhandenen Dokumentation zum Herstellen einer Verbindung zu einem Netzwerk und zum Cloud-Messaging.

FCM funktioniert gut mit Doze und ist die empfohlene Methode zum Senden von Benachrichtigungen an eine Smartwatch.

Sorgen Sie für Nachrichten von FCM, indem Sie ein Registrierungstoken für ein Gerät erfassen, wenn Ihre Wear OS-App ausgeführt wird. Fügen Sie das Token dann als Teil des Ziels ein, wenn Ihr Server Nachrichten an den FCM-REST-Endpunkt sendet. FCM sendet Nachrichten an das Gerät, das durch das Token identifiziert wird.

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

  • Benachrichtigungs-Payload:Wenn eine Benachrichtigungs-Payload auf einer Smartwatch empfangen wird, werden die Daten dem Nutzer direkt im Benachrichtigungsstream angezeigt. Wenn der Nutzer auf die Benachrichtigung tippt, wird Ihre App gestartet.
  • Datennutzlast:wenn die Nutzlast eine Reihe von benutzerdefinierten Schlüssel/Wert-Paaren enthält. Die Nutzlast wird als Daten an Ihre Wear OS-App gesendet.

Weitere Informationen und Beispiele für Nutzlasten finden Sie unter Nachrichtentypen.

Standardmäßig werden Benachrichtigungen von einer Smartphone-App an eine Smartwatch weitergeleitet. Wenn Sie eine eigenständige Wear OS-App und eine entsprechende Smartphone-App haben, können doppelte Benachrichtigungen auftreten. Beispiel: Eine einzelne Benachrichtigung von FCM, die sowohl auf einem Smartphone als auch auf einer Smartwatch empfangen wird, kann von beiden Geräten unabhängig voneinander angezeigt werden. Sie können dies verhindern, indem Sie Bridging-APIs verwenden.

Hintergrunddienste verwenden

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

Wenn sich ein Display ausschaltet oder für längere Zeit in den Inaktivmodus wechselt, kann ein Teil von Doze aktiviert werden und Hintergrundaufgaben können für bestimmte Zeiträume aufgeschoben werden. Wenn das Gerät später längere Zeit nicht bewegt wird, tritt der normale Doze-Modus ein. Planen Sie Anfragen mit der WorkManager API, damit Ihre App sich für die Doze-kompatible Codeausführung registrieren kann.

Zeitplan mit Einschränkungen

Mit Einschränkungen können Sie Anfragen so konfigurieren, dass der Akku geschont wird. Wählen Sie eine oder mehrere der folgenden Einschränkungen aus, die in Ihre Anfragen aufgenommen werden sollen:

  • Planen Sie eine Anfrage, für die eine Netzwerkverbindung erforderlich ist.

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

  • Anfrage während des Ladevorgangs planen

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

Weitere Informationen finden Sie im Leitfaden Auswirkungen von Einschränkungen auf periodische Aufgaben von WorkManager.