Share via


Come gestire gli eventi di connessione di rete e le modifiche della disponibilità (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

Questo argomento illustra come registrarsi per ricevere le notifiche relative ai cambiamenti di stato della connessione di rete e recuperare informazioni sullo stato corrente tramite le classi dello spazio dei nomi Windows.Networking.Connectivity.

Sono forniti inoltre consigli per un comportamento delle app che supporti un'esperienza utente coerente all'interno di scenari di rete.

Prerequisiti

Gli esempi seguenti usano JavaScript e sono basati sull'esempio di informazioni di rete. Per informazioni generali sulla creazione di un'app di Windows Runtime in JavaScript, vedi Creare la prima app di Windows Runtime in JavaScript.

Sapere che cos'è un elemento ConnectionProfile e come accedere alle informazioni che rappresenta è importante. Per altre informazioni, vedi Come recuperare informazioni sulla connessione di rete. Per altri esempi di codice, scarica l'Esempio di informazioni di rete.

Che cos'è un evento di modifica dello stato della connessione?

Gli eventi di modifica dello stato indicano cambiamenti nella disponibilità, nel tipo o nel costo di connettività offerti da una singola connessione. Le app connesse più recenti spesso devono gestire scenari di attraversamento della rete tipici dei dispositivi mobili. Quando Windows Runtime rileva una nuova rete, la offre automaticamente come nuova opzione di connettività. Ad esempio, se un utente usa un dispositivo su una rete 3G o 4G per la trasmissione di dati ed entra nel raggio di copertura di una rete Wi-Fi, la nuova opzione di connettività sarà disponibile per l'uso da parte dell'applicazione. Ovviamente, questo significa anche che un utente può uscire dal raggio di copertura di una rete, anche della rete in uso.

Tenendo conto di tutte queste possibilità, è importante dotare l'app della logica che consente scelte intelligenti quando si verificano cambiamenti nella disponibilità di rete. Le connessioni di rete esistenti non passeranno automaticamente ad altre connessioni in modo trasparente. La tua app deve registrarsi per gli eventi networkstatuschanged e adattarsi di conseguenza.

Registrazione per le notifiche degli eventi di modifica dello stato della connessione

Prima che l'app possa adattarsi alle modifiche degli stati della rete, deve sapere quando questi si verificano. Il codice di esempio seguente mostra come registrarsi per le notifiche di eventi per networkstatuschanged per un profilo di connessione specifico.

Per le chiamate della maggior parte dei metodi di rete asincroni devi quindi scrivere codice per gestire le eccezioni. Anche i metodi nello spazio dei nomi Windows.Networking.Connectivity che si registrano per le notifiche degli eventi o tentano di recuperare un ConnectionProfile possono generare eccezioni. Il gestore delle eccezioni può recuperare ulteriori dettagli sulla causa, in modo da comprendere meglio l'errore e prendere le decisioni appropriate. Per altre informazioni, vedi Come gestire le eccezioni nelle app di rete.


// 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);
        }
    }
}

Se uno scenario di rete cambia, è possibile che la tua app debba annullare la registrazione per le notifiche dei cambiamenti di stato della rete, se la registrazione è già stata eseguita, per poi registrarsi nuovamente per le notifiche per il nuovo scenario di rete.

//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");
    }
}

Recupero delle informazioni sulle modifiche dello stato della connessione

Quando si verifica una modifica di stato, l'esempio seguente di gestore eventi recupera il ConnectionProfile associato per il profilo di connessione Internet corrente. Questo ConnectionProfile può essere usato per recuperare e visualizzare informazioni sullo stato della connessione, che includono l'ambito, il tipo e i costi di connettività correnti, come definito da NetworkConnectivityLevel, NetworkTypes e 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");
    }
}

Esiste un'ampia gamma di stati di rete soggetti a variazione che corrispondono a un evento di modifica dello stato della rete. Ad esempio un nuovo ConnectionProfile, nuovi costi di connessione, un diverso livello di connettività e altri cambiamenti per un dispositivo. Il gestore eventi precedente può usare la classe NetworkStateChangeEventDetails per stabilire cosa è cambiato.

Comportamento dell'app consigliato per la gestione delle modifiche dello stato della connessione

La tabella seguente descrive più in dettaglio gli scenari principali di modifica dello stato della connessione e offre consigli sul comportamento dell'app:

Scenario Comportamento consigliato
Perdita della connessione a causa di un errore

Le connessioni possono essere ristabilite semplicemente riprovando l'operazione di rete. Se questa operazione non riesce, attendi un evento networkstatuschanged per recuperare le informazioni sullo stato corrente della connessione. È consigliabile utilizzare un intervallo di backoff che aumenta esponenzialmente fra un tentativo e l'altro, a partire da 50 millisecondi.

Perdita della rete

Informa l'utente che la connessione è stata persa, quindi effettua la registrazione e attendi un evento networkstatuschanged.

Disponibilità di una nuova rete

Con l'avvento dei dispositivi mobili, sono frequenti gli scenari in cui un unico dispositivo attraversa più reti pubbliche e private. Ad esempio, un utente può essere connesso a una chat tramite Mobile Broadband e l'app di messaggistica e connettersi anche alla propria rete domestica senza restrizioni quando torna a casa. In base ai criteri predefiniti di Windows 8, Windows Server 2012 e Windows Phone 8.1, le reti senza restrizioni vengono preferite a quelle a consumo e le reti più veloci vengono preferite a quelle più lente. Le connessioni esistenti stabilite da un'app non vengono tuttavia sostituite automaticamente da una nuova rete. L'app deve essere coinvolta, perché solo l'app è in grado di stabilire se passare o meno alla nuova rete.

Se il download di un flusso video è prossimo alla conclusione, non ha senso passare alla nuova rete e riavviare il download. Se la rete corrente perde i pacchetti o è troppo lenta oppure il completamento del flusso richiede più tempo, invece, può essere consigliabile passare alla nuova rete.

Se determini che nello scenario dell'app è plausibile passare da una rete all'altra, segui queste linee guida quando rilevi una nuova rete:

1. Controlla il costo della rete e riprova l'operazione di rete se è disponibile una connessione migliore. A seconda della disponibilità, Windows dà automaticamente la precedenza alle reti senza restrizioni rispetto a quelle a consumo e alle reti veloci rispetto a quelle lente.

2. Se il nuovo tentativo di eseguire l'operazione di rete riesce, annulla l'operazione di rete originale sulla rete precedente, se esiste.

Cambiamento del costo della rete

Le reti mobili in particolare impongono spesso restrizioni molto specifiche sull'uso. Se la tua app rileva un cambiamento del costo della rete dovuto a un consumo superiore all'80% del tetto di dati Mobile Broadband, a un costo variabile o al roaming, adatta il comportamento dell'app come descritto in dettaglio in Come gestire i vincoli di costo per le reti a consumo.

 

Nota  Gli sviluppatori avanzati possono anche scegliere di ottimizzare il comportamento dell'app quando provano a rieseguire operazioni di rete. Ad esempio, potresti voler sostituire una connessione esistente con una connessione su una rete a velocità più elevata. In questo caso lo sviluppatore può usare le API socket, ad esempio StreamSocketInformation.bandwidthStatistics, per determinare se conviene passare a un'altra connessione.

 

In questo argomento abbiamo visto come effettuare la registrazione alle notifiche di modifica dello stato della connessione e usare queste notifiche per recuperare le informazioni sullo stato corrente dal ConnectionProfile per cui si è verificato l'evento. Abbiamo visto anche il comportamento consigliato per l'app nella gestione degli scenari più frequenti di modifica dello stato.

Questo argomento riguarda la disponibilità di rete, ma all'interno di scenari relativi alla connessione a reti a consumo un evento networkstatuschanged può rappresentare anche un cambiamento delle proprietà relative al costo e al piano dati. Per altre informazioni e istruzioni sulle modalità più indicate per modificare il comportamento dell'app in questi scenari, vedi Come gestire i vincoli di costo per le reti a consumo.

Argomenti correlati

Altro

Creazione della prima app di Windows Runtime in JavaScript

Come gestire le eccezioni nelle app di rete

Come gestire i vincoli di costo per le reti a consumo

Come recuperare le informazioni su scheda di rete e località

Come recuperare le informazioni sulla connessione di rete

Come recuperare le informazioni sull'uso della connessione di rete

Riferimenti

ConnectionProfile

NetworkInformation

networkstatuschanged

networkStatusChangedEventHandler

Windows.Networking.Connectivity

Esempi

Esempio di informazioni di rete

Esempio di background di stato di rete