So wird’s gemacht: Verwalten von Netzwerkverbindungsereignissen und Änderungen der Verfügbarkeit (HTML)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]

In diesem Thema wird erläutert, wie Sie die App für den Empfang von Benachrichtigungen über Änderungen des Netzwerkverbindungsstatus registrieren und die aktuellen Statusinformationen mit Klassen im Windows.Networking.Connectivity-Namespace abrufen.

Außerdem erhalten Sie Empfehlungen zum App-Verhalten, das in Netzwerkszenarien für eine einheitliche Benutzererfahrung sorgt.

Voraussetzungen

Die folgenden Beispiele verwenden JavaScript und basieren auf dem Netzwerkinformationsbeispiel. Allgemeine Informationen zum Erstellen einer Windows-Runtime-App mit JavaScript finden Sie unter Erstellen Ihrer ersten Windows-Runtime-App mit JavaScript.

Es ist wichtig, dass Sie wissen, was ein ConnectionProfile ist und wie Sie auf die Informationen zugreifen, die es darstellt. Weitere Informationen finden Sie unter So wird's gemacht: Abrufen von Netzwerkverbindungsinformationen. Weitere Codebeispiele finden Sie im Download Netzwerkinformationsbeispiel.

Wodurch sind Verbindungsstatusänderungs-Ereignisse gekennzeichnet?

Statusänderungsereignisse zeigen Änderungen hinsichtlich der Verfügbarkeit, der Art oder der Kosten der Konnektivität an, die von einzelnen Verbindungen bereitgestellt wird. Bei den neuesten Apps mit Netzwerkverbindungen treten bei normaler Verwendung des Mobilgeräts häufig Netzwerkübergänge auf. Wenn die Windows-Runtime ein neues Netzwerk erkennt, stellt sie es automatisch als neue Verbindungsoption bereit. Verwendet ein Benutzer z. B. ein Gerät in einem 3G/4G-Netzwerk, um Daten zu streamen, und wechselt dann in den Empfangsbereich eines WLANs, so steht der App diese neue Verbindungsoption zur Verfügung. Das bedeutet natürlich auch, dass ein Benutzer den Bereich eines Netzwerks verlassen kann, auch wenn dieses gerade verwendet wird.

Angesichts all dieser Möglichkeiten ist es wichtig, dass Sie Ihre App mit Logik ausstatten, die eine intelligente Auswahl erlaubt, wenn Änderungen der Netzwerkverfügbarkeit auftreten. Vorhandene Netzwerkverbindungen werden nicht automatisch nahtlos auf andere Verbindungen umgeschaltet. Ihre App muss networkstatuschanged-Ereignisse registrieren und entsprechend angepasst werden.

Registrieren für Benachrichtigungen über Verbindungsstatusänderungs-Ereignisse

Damit Ihre App sich an Änderungen am Netzwerkstatus anpassen kann, muss sie zunächst einmal wissen, wann diese auftreten. Der folgende Beispielcode zeigt, wie Ereignisbenachrichtigungen für networkstatuschanged für ein bestimmtes Verbindungsprofil registriert werden.

Beim Aufrufen der meisten asynchronen Netzwerkmethoden müssen Sie Code zum Behandeln von Ausnahmen schreiben. Zudem können die Methoden im Windows.Networking.Connectivity-Namespace, die Ereignisbenachrichtigungen registrieren oder ein ConnectionProfile abzurufen versuchen, Ausnahmen auslösen. Ihr Ausnahmehandler kann detailliertere Informationen zur Ursache abrufen, um die Ausnahme besser verstehen und entsprechende Entscheidungen treffen zu können. Weitere Informationen finden Sie unter So wird's gemacht: Behandeln von Ausnahmen in Netzwerk-Apps.


// Define some variables used

// A variable to store network status change information
var internetProfileInfo = "";

// A  boolean to keep track of registration for network status change notifications
var registeredNetworkStatusNotif = false;

var networkInfo = Windows.Networking.Connectivity.NetworkInformation;

//Register for Network Status Change notifications, and display new Internet Connection Profile information on network status change
function registerForNetworkStatusChangeNotif() {

    // register for network status change notifications
    if (!registeredNetworkStatusNotif) {
        try {
            networkInfo.addEventListener("networkstatuschanged", onNetworkStatusChange);
            registeredNetworkStatusNotif = true;

            if (internetProfileInfo === "") {
                mySample.displayStatus("No network status change. ", "sample", "status");
        }
        catch (e) {
            mySample.displayError("An unexpected exception occured: " + e.name + ": " + e.message);
        }
    }
}

Wenn sich ein Netzwerkszenario ändert, muss Ihre App die Registrierung von Benachrichtigungen über Netzwerkstatusänderungen ggf. aufheben und für Benachrichtigungen für das neue Szenario erneut vornehmen.

//Unregister for Network Status Change notifications
function unRegisterForNetworkStatusChangeNotif() {
    try {
        networkInfo.removeEventListener("networkstatuschanged", onNetworkStatusChange);
        internetProfileInfo = "";
    }
    catch (e) {
        mySample.displayError("An unexpected exception occured: " + e.name + ": " + e.message, "sample", "error");
    }
}

Abrufen der Verbindungsstatusänderungs-Informationen

Im Fall einer Statusänderung ruft der folgende Beispielereignishandler das zugeordnete ConnectionProfile für das aktuelle Internetverbindungsprofil ab. Dieses ConnectionProfile kann verwendet werden, um Informationen zum Verbindungsstatus abzurufen und anzuzeigen. Dazu zählen die aktuelle Konnektivitätsebene, der Netzwerktyp und die Verbindungskosten (definiert in NetworkConnectivityLevel, NetworkTypes und NetworkCostType).

// Event handler for Network Status Change event
function onNetworkStatusChange(sender) {

    //network status changed
    internetProfileInfo = "Network Status Changed: \n\r";

    try {
        // get the ConnectionProfile that is currently used to connect to the Internet
        var internetProfile = networkInfo.getInternetConnectionProfile();
        if (internetProfile === null) {
            mySample.displayStatus("Not connected to Internet\n\r");
        }
        else {
            internetProfileInfo += getConnectionProfileInfo(internetProfile) + "\n\r";
            mySample.displayStatus(internetProfileInfo);
        }
        internetProfileInfo = "";
    }
    catch (e) {
            mySample.displayError("An unexpected exception occured: " + e.name + ": " + e.message, "sample", "error");
    }
}

Es gibt verschiedene Netzwerkstatus, die sich ändern und zu einem Netzwerkstatusänderungs-Ereignis führen können. Dazu zählen neue ConnectionProfiles, neue Verbindungskosten, neue Konnektivitätsebenen und andere Änderungen. Der obige Ereignishandler kann mithilfe von NetworkStateChangeEventDetails-Klasse feststellen, was sich geändert hat.

Empfohlenes App-Verhalten für die Behandlung von Verbindungsstatusänderungen

In der folgenden Tabelle sind die wichtigsten Szenarien für Verbindungsstatusänderungen und Empfehlungen zum App-Verhalten aufgeführt:

Szenario Empfohlenes Verhalten
Verbindungsverlust aufgrund eines Fehlers

Verbindungen können wiederhergestellt werden, indem einfach versucht wird, den Netzwerkvorgang erneut auszuführen. Ist dies nicht erfolgreich, warten Sie, bis das networkstatuschanged-Ereignis die aktuellen Informationen zum Verbindungsstatus abruft. Apps sollten ein exponentiell ansteigendes Intervall zwischen den Wiederholungen verwenden, beginnend bei einem Wert von 50 Millisekunden.

Verlust der Netzwerkverbindung

Informieren Sie den Benutzer, dass die Verbindung unterbrochen ist. Führen Sie dann die Registrierung durch, und warten Sie auf das Eintreten eines networkstatuschanged-Ereignisses.

Verfügbarkeit eines neuen Netzwerks

Bei mobilen Geräten kommt es häufig vor, dass mit einem einzelnen Gerät mehrere öffentliche und private Netzwerke genutzt werden. Benutzer können z. B. über eine aktive mobile Breitbandverbindung verfügen und mit der Nachrichten-App mit Freunden chatten, bevor sie ihr Zuhause erreichen und dort eine Verbindung mit dem uneingeschränkten Heimnetzwerk herstellen. Die Standardrichtlinie in Windows 8, Windows Server 2012, Windows Phone 8.1 und höher schreibt vor, dass anstelle eines getakteten Netzwerks ein uneingeschränktes Netzwerk und anstelle eines langsameren Netzwerks ein schnelleres Netzwerk verwendet werden soll. Vorhandene, von einer App eingerichtete Verbindungen schalten jedoch nicht automatisch auf ein neues Netzwerk um. Die App muss eingreifen, da nur sie die beste Entscheidung hinsichtlich eines Wechsels zum neuen Netzwerk treffen kann.

Steht der Download eines Videostreams kurz vor seinem Abschluss, ist es vielleicht nicht sinnvoll, zum neuen Netzwerk zu wechseln und den Download neu zu starten. Falls bei der aktuellen Netzwerkverbindung jedoch Pakete verloren gehen, die Netzwerkverbindung zu langsam ist oder der Stream mehr Zeit erfordert, kann der Wechsel zum neuen Netzwerk die beste Option sein.

Befolgen Sie diese Richtlinien in Bezug auf die Erkennung eines neuen Netzwerks, wenn Sie ermittelt haben, dass der Netzwerkwechsel für Ihre App sinnvoll ist:

1. Überprüfen Sie die Netzwerkkosten, und wiederholen Sie den Netzwerkvorgang, wenn eine bessere Verbindung verfügbar ist. Windows wählt automatisch das uneingeschränkte Netzwerk anstelle des getakteten Netzwerks und das schnellere Netzwerk anstelle des langsameren Netzwerks aus (falls verfügbar).

2. Wenn Sie erneut versuchen, ob der Netzwerkvorgang erfolgreich ist, brechen Sie den ursprünglichen Netzwerkvorgang für das vorherige Netzwerk ab (falls vorhanden).

Änderung der Netzwerkkosten

Besonders bei mobilen Netzwerken gelten für die Nutzung häufig sehr spezielle Beschränkungen. Wenn die App eine Änderung der Netzwerkkosten aufgrund einer Nutzung von über 80 Prozent des Datenlimits der mobilen Breitbandverbindung, von variablen Kosten oder Roaming erkennt, sollten Sie das App-Verhalten wie unter So wird's gemacht: Verwalten von Kosteneinschränkungen in getakteten Netzwerken beschrieben anpassen.

 

Hinweis  Erfahrene Entwickler können auch beim Wiederholen von Netzwerkvorgängen das App-Verhalten optimieren. Sie sollten z. B. eine vorhandene Verbindung durch eine neue mit einem Netzwerk mit höherer Geschwindigkeit ersetzen. In diesem Fall kann ein Entwickler mithilfe der Sockets-APIs wie StreamSocketInformation.bandwidthStatistics ermitteln, ob der Verbindungswechsel sinnvoll ist.

 

Zusammenfassung

Sie haben in diesem Thema erfahren, wie Sie Ihre App für Benachrichtigungen über Verbindungsstatusänderungen registrieren und die dabei erhaltenen Informationen zum Abrufen der aktuellen Zustandsinformationen aus dem ConnectionProfile-Element verwenden, für das das Ereignis aufgetreten ist. Außerdem wurde das empfohlene App-Verhalten in Bezug auf den Umgang mit den häufigsten Zustandsänderungsszenarien behandelt.

In diesem Thema ging es um die Verfügbarkeit von Netzwerken, aber bei Szenarien mit Verbindungen zu getakteten Netzwerken kann ein networkstatuschanged-Ereignis auch eine Änderung der Kosten- und Datentarifeigenschaften darstellen. Weitere Informationen und Anleitungen dazu, wie Sie das App-Verhalten in solchen Szenarien am besten ändern, finden Sie unter So wird's gemacht: Verwalten von Kosteneinschränkungen in getakteten Netzwerken.

Verwandte Themen

Sonstige

Erstellen Ihrer ersten Windows-Runtime-App mit JavaScript

So wird's gemacht: Behandeln von Ausnahmen in Netzwerk-Apps

So wird's gemacht: Verwalten von Kosteneinschränkungen in getakteten Netzwerken

Abrufen von Netzwerkadapter- und Ortsinformationen

So wird's gemacht: Abrufen von Netzwerkverbindungsinformationen

So wird's gemacht: Abrufen von Netzwerk-Verbindungsnutzungsdaten

Referenz

ConnectionProfile

NetworkInformation

networkstatuschanged

networkStatusChangedEventHandler

Windows.Networking.Connectivity

Beispiele

Netzwerkinformationsbeispiel

Hintergrundbeispiel für den Netzwerkstatus