Windows Dev Center

Linguaggio: HTML | XAML

Come recuperare le informazioni sulla connessione di rete (XAML)

In questo argomento viene illustrato come recuperare i dettagli sulla connettività e le informazioni sull'uso per le connessioni di rete in un dispositivo mediante le classi dello spazio dei nomi Windows.Networking.Connectivity.

Prerequisiti

Gli esempi seguenti usano C# o C++ e sono basati sull'esempio di informazioni di rete. Per istruzioni generali sulla creazione di un'app di Windows Runtime scritta in C# o Visual Basic, vedi Creare la prima app di Windows Runtime in C# o Visual Basic. Per informazioni sulla creazione di un'app di Windows Runtime in C++, vedi Creazione della prima app di Windows Runtime in C++.

Cos'è un profilo di connessione?

Un ConnectionProfile rappresenta una singola connessione stabilita in un dispositivo. Le informazioni contenute in un ConnectionProfile possono essere usate per determinare il livello di connettività corrente, tenere traccia dell'uso dei dati oppure per identificare la scheda di rete usata per la connessione. Tramite la registrazione per ricevere notifica delle modifiche delle proprietà di ConnectionProfile, l'app di Windows Runtime connessa può effettuare le scelte giuste per adattare il comportamento alle variazioni dell'ambiente di rete. Per altre informazioni, vedi Come gestire gli eventi di connessione di rete e le modifiche della disponibilità.

Per scenari più specifici, come nel caso di applicazioni connesse per dispositivi mobili che usano spesso opzioni di roaming e operano su reti a consumo, ConnectionProfile fornisce informazioni su costi e piani dati che possono essere usate per evitare di incorrere in spese impreviste. Per altre informazioni, vedi Come gestire i vincoli di costo per le reti a consumo.

Ogni ConnectionProfile fornisce le seguenti informazioni sulla connessione:

DatiForniti daDescrizione

Costo connessione

ConnectionCost

Informazioni dettagliate sui costi, inclusi limite dati e informazioni di roaming.

Tipo di costo

NetworkCostType

Il tipo di costo della rete attualmente usata dalla connessione.

Stato e uso del piano dati

DataPlanStatus, DataPlanUsage

Informazioni sull'uso del piano dati associato alla connessione.

Uso locale

NetworkUsage

Informazioni sull'uso della connessione locale.

Scheda di rete

NetworkAdapter

La scheda di rete che fornisce la connettività per la connessione.

Proprietà delle connessioni WLAN e WWAN

WlanConnectionProfileDetails

WwanConnectionProfileDetails

Fornisce ulteriori informazioni specifiche dei profili di connessione WLAN e WWAN.

 

Recupero dei profili di connessione

La classe NetworkInformation è una classe statica che definisce i metodi usati dall'app per recuperare un ConnectionProfile. La classe NetworkInformation definisce due metodi per il recupero di un ConnectionProfile. Se devi restituire solo il profilo associato alla connessione Internet, usa il metodo GetInternetConnectionProfile.

Per le chiamate della maggior parte dei metodi di rete asincroni devi quindi scrivere codice per gestire le eccezioni. Inoltre, i metodi nello spazio dei nomi Windows.Networking.Connectivity che recuperano 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 ulteriori informazioni, vedi Come gestire le eccezioni nelle app di rete.



    //Get the Internet connection profile
    string connectionProfileInfo = string.Empty;
    try {
        ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile();

        if (InternetConnectionProfile == null) {
            NotifyUser("Not connected to Internet\n");
        }
        else {
            connectionProfileInfo = GetConnectionProfile(InternetConnectionProfile);
            NotifyUser("Internet connection profile = " +connectionProfileInfo);
        }
    }
    catch (Exception ex) {
        NotifyUser("Unexpected exception occurred: " + ex.ToString());
    }



Se desideri recuperare i profili di tutte le connessioni, inclusa la connessione Internet, usa il metodo GetConnectionProfiles.



    // Get all connection profiles
    string connectionProfileList = string.Empty;
    try {
        var ConnectionProfiles = NetworkInformation.GetConnectionProfiles();
        foreach (var connectionProfile in ConnectionProfiles) {
            //Display Profile information for each of the connection profiles
            connectionProfileList += GetConnectionProfile(connectionProfile);
            connectionProfileList += "--------------------------------------------------------------------\n";
        }
            NotifyUser("Internet connection profile = " +connectionProfileList);
    }
    catch (Exception ex) {
        NotifyUser("Unexpected exception occurred: " + ex.ToString());
    }


Accesso alle informazioni da un profilo di connessione

L'esempio di codice seguente chiama i metodi del ConnectionProfile per recuperare le informazioni relative allo stato, al costo e all'uso del piano dati della connessione di rete. Il metodo GetConnectionCost in ConnectionProfile recupera le informazioni di ConnectionCost per il profilo. Il metodo GetDataPlanStatus in ConnectionProfile recupera le informazioni di DataPlanStatus per il profilo. Altri metodi in ConnectionProfile possono recuperare informazioni sulla rete LAN wireless se il profilo di connessione usa informazioni sul Wi-Fi o sulla rete WAN wireless quando il profilo di connessione usa la banda larga mobile.


//Get some ConnectionProfile information
//
string GetConnectionProfile(ConnectionProfile connectionProfile)
{
    string connectionProfileInfo = string.Empty;
    if (connectionProfile != null) {
        connectionProfileInfo = "Profile Name : " + connectionProfile.ProfileName + "\n";

        switch (connectionProfile.GetNetworkConnectivityLevel()) {
            case NetworkConnectivityLevel.None:
                connectionProfileInfo += "Connectivity Level : None\n";
                break;
            case NetworkConnectivityLevel.LocalAccess:
                connectionProfileInfo += "Connectivity Level : Local Access\n";
                break;
            case NetworkConnectivityLevel.ConstrainedInternetAccess:
                connectionProfileInfo += "Connectivity Level : Constrained Internet Access\n";
                break;
            case NetworkConnectivityLevel.InternetAccess:
                connectionProfileInfo += "Connectivity Level : Internet Access\n";
                break;
        }

        switch (connectionProfile.GetDomainConnectivityLevel()) {
            case DomainConnectivityLevel.None:
                connectionProfileInfo += "Domain Connectivity Level : None\n";
                break;
            case DomainConnectivityLevel.Unauthenticated:
                connectionProfileInfo += "Domain Connectivity Level : Unauthenticated\n";
                break;
            case DomainConnectivityLevel.Authenticated:
                connectionProfileInfo += "Domain Connectivity Level : Authenticated\n";
                break;
        }

        //Get Connection Cost information
        ConnectionCost connectionCost = connectionProfile.GetConnectionCost();
        connectionProfileInfo += GetConnectionCostInfo(connectionCost);

        //Get Dataplan Status information
        DataPlanStatus dataPlanStatus = connectionProfile.GetDataPlanStatus();
        connectionProfileInfo += GetDataPlanStatusInfo(dataPlanStatus);
                
    }
    return connectionProfileInfo;
}

// Get ConnectionCost information for a profile
string GetConnectionCostInfo(ConnectionCost connectionCost)
{
    string cost = string.Empty;
    cost += "Connection Cost Information: \n";
    cost += "====================\n";

    if (connectionCost == null) {
        cost += "Connection Cost not available\n";
        return cost;
    }

    switch (connectionCost.NetworkCostType) {
         case NetworkCostType.Unrestricted:
             cost += "Cost: Unrestricted";
             break;
         case NetworkCostType.Fixed:
             cost += "Cost: Fixed";
             break;
         case NetworkCostType.Variable:
             cost += "Cost: Variable";
             break;
         case NetworkCostType.Unknown:
             cost += "Cost: Unknown";
             break;
         default:
             cost += "Cost: Error";
             break;
     }
     cost += "\n";
     cost += "Roaming: " + connectionCost.Roaming + "\n";
     cost += "Over Data Limit: " + connectionCost.OverDataLimit + "\n";
     cost += "Approaching Data Limit : " + connectionCost.ApproachingDataLimit + "\n";

     return cost;
}

// Get DataPlanStatus information for a profile
string GetDataPlanStatusInfo(DataPlanStatus dataPlan)
{
    string dataplanStatusInfo = string.Empty;
    dataplanStatusInfo = "Dataplan Status Information:\n";
    dataplanStatusInfo += "====================\n";

    if (dataPlan == null) {
        dataplanStatusInfo += "Dataplan Status not available\n";
        return dataplanStatusInfo;
    }
            
    if (dataPlan.DataPlanUsage != null) {
        dataplanStatusInfo += "Usage In Megabytes : " + dataPlan.DataPlanUsage.MegabytesUsed + "\n";
        dataplanStatusInfo += "Last Sync Time : " + dataPlan.DataPlanUsage.LastSyncTime + "\n";
    }
    else {
        dataplanStatusInfo += "Usage In Megabytes : Not Defined\n";
    }

    ulong? inboundBandwidth = dataPlan.InboundBitsPerSecond;
    if (inboundBandwidth.HasValue) {
        dataplanStatusInfo += "InboundBitsPerSecond : " + inboundBandwidth + "\n";
    }
    else {
        dataplanStatusInfo += "InboundBitsPerSecond : Not Defined\n";
    }

    ulong? outboundBandwidth = dataPlan.OutboundBitsPerSecond;
    if (outboundBandwidth.HasValue) {
        dataplanStatusInfo += "OutboundBitsPerSecond : " + outboundBandwidth + "\n";
    }
    else {
        dataplanStatusInfo += "OutboundBitsPerSecond : Not Defined\n";
    }

    uint? dataLimit = dataPlan.DataLimitInMegabytes;
    if (dataLimit.HasValue) {
        dataplanStatusInfo += "DataLimitInMegabytes : " + dataLimit + "\n";
    }
    else {
        dataplanStatusInfo += "DataLimitInMegabytes : Not Defined\n";
    }

    System.DateTimeOffset? nextBillingCycle = dataPlan.NextBillingCycle;
    if (nextBillingCycle.HasValue) {
        dataplanStatusInfo += "NextBillingCycle : " + nextBillingCycle + "\n";
    }
    else {
        dataplanStatusInfo += "NextBillingCycle : Not Defined\n";
    }

    uint? maxTransferSize = dataPlan.MaxTransferSizeInMegabytes;
    if (maxTransferSize.HasValue) {
        dataplanStatusInfo += "MaxTransferSizeInMegabytes : " + maxTransferSize + "\n";
    }
    else {
        dataplanStatusInfo += "MaxTransferSizeInMegabytes : Not Defined\n";
    }
    return dataplanStatusInfo;
}

Riepilogo

In questo argomento abbiamo visto come recuperare i profili di connessione e le informazioni sulla connettività contenute in ogni profilo. Usare queste informazioni per consentire alla tua app di fare scelte appropriate è fondamentale per garantire un'esperienza di connessione affidabile.

Per altre linee guida e procedure consigliate sull'uso delle informazioni di connessione per adattare il comportamento dell'app connessa in rete, vedi Come gestire gli eventi di connessione di rete e le modifiche della disponibilità.

Argomenti correlati

Altro
Creare la prima app di Windows Runtime in C# o Visual Basic
Creare la prima app di Windows Runtime in C++
Come gestire le eccezioni nelle app di rete
Come gestire i vincoli di costo per le reti a consumo
Come gestire gli eventi di connessione di rete e le modifiche della disponibilità
Come recuperare le informazioni su scheda di rete e località
Come recuperare le informazioni sull'uso della connessione di rete
Riferimenti
ConnectionCost
ConnectionProfile
DataPlanStatus
NetworkInformation
Windows.Networking.Connectivity
Esempi
Esempio di informazioni di rete
Esempio di background di stato di rete

 

 

Mostra:
© 2015 Microsoft