Georg fährt extra nach Berlin um Steve Ballmer zu treffen

31 Tage Mango | Tag #10: Network Information

Dieser Artikel ist Tag #10 der Serie 31 Tage Mango von Jeff Blankenburg.

Der Originalartikel befindet sich hier: Day #10: Network Information.

Heute schauen wir uns den Namespace NetworkInformation aus dem Windows Phone 7.1 SDK an. Die darin enthaltenen APIs geben uns reichhaltige Informationen über die Datenverbindung eines Geräts. Wir erfahren über die Datenverbindung z.B. die Verfügbarkeit, den Typ, usw.

Was beinhaltet der Namespace NetworkInformation?

Der NetworkInformation Namespace enthält eine Reihe von Klassen, die Ihnen Informationen über die Datenverbindung des betreffenden Geräts geben. Auf zwei Ausschnitte aus dem Namespace gehen wir im heutigen Artikel ausführlicher ein:

  • DeviceNetworkInformation – Eine Reihe von Eigenschaften um zu erfahren, welche Verbindungsarten auf dem Gerät aktiviert sind.
  • NetworkInterfaceList – Eine Liste aller Netzwerke, mit denen das Gerät des Anwenders verbunden ist. Diese Liste beinhaltet sowohl das Netzwerk der Telefongesellschaft als auch drahtlose Netzwerke.

Abgesehen von den offensichtlichen Gründen, sich für die Datenverbindung des Geräts zu interessieren, habe ich von einigen ziemlich interessanten Nutzungsszenarien gehört. Stellen Sie sich eine Anwendung vor, die eine Art akademischer Prüfung durchführt. Hier würde man natürlich vermeiden wollen, dass der Anwender das Internet zur Beantwortung der Fragen verwendet. Man würde also überprüfen, dass das Telefon wirklich keine Datenverbindung hat. Oder vielleicht haben Sie eine Anwendung, mit welcher der Anwender neue E-Books herunterladen kann. Abhängig von den Verbindungseigenschaften könnte man den Anwender informieren, dass er erst eine Datenverbindung aktivieren muss, bevor er den Katalog ansehen kann.

DeviceNetworkInformation benutzen

DeviceNetworkInformation ist eine Menge von fünf Boolschen und String Variablen, mit denen wir erfahren können, was für eine Datenverbindung der Anwender zur Zeit hat. Hier ist eine Liste mit Beschreibungen der einzelnen Werte:

CellularMobileOperator Gibt Ihnen den Namen der Telefongesellschaft, mit der das Gerät gerade verbunden ist. string
IsNetworkAvailable Dieser Wert gibt nur an, ob übehaupt eine Datenverbindung verfügbar ist. Diesen werden Sie wahrscheinlich am häufigsten verwenden. Der Wert gibt allerdings nicht an, ob auch eine Internetverbindung besteht. Er sagt lediglich aus, dass das Telefon mit einem Netzwerk verbunden ist. boolean
IsCellularDataEnabled Zeigt Ihnen an, ob eine Datenverbindung über das Handynetz besteht. boolean
IsCellularDataRoamingEnabled Zeigt an, ob Datenroaming aktiviert ist. Dieser Wert ist normalerweise auf false. boolean
IsWifiEnabled Fragt ab, ob WLAN aktiviert ist. boolean
NetworkAvailabilityChanged Diesen Event Handler können wir verwenden, um über eine Änderung bei der Datenverbindung des Geräts unterrichtet zu werden.  

Die Benutzeroberfläche ist dieses Mal extrem einfach. Wir fügen nur einen TextBlock innerhalb eines ScrollViewer Controls hinzu. Wenn Sie die Anwendungen der vergangenen Tage schon mit gebaut haben, kennen Sie sich bereit aus. Das folgende Codebeispiel enthält die XAML Oberfläche für unsere MainPage.xaml.

<phone:PhoneApplicationPage
   x:Class="Day10_NetworkInformation.MainPage"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
   xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
   FontFamily="{StaticResource PhoneFontFamilyNormal}"
   FontSize="{StaticResource PhoneFontSizeNormal}"
   Foreground="{StaticResource PhoneForegroundBrush}"
   SupportedOrientations="Portrait" Orientation="Portrait"
   shell:SystemTray.IsVisible="True">

    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="31 DAYS OF MANGO - DAY #10" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="network information" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <ScrollViewer>
                <TextBlock x:Name="ContentBox" FontSize="20" />
            </ScrollViewer>
        </Grid>
    </Grid>
</phone:PhoneApplicationPage> 

Wir werden in der heutigen Anwendung einfach alle Werte in diesen TextBlock schreiben. Mit der Benutzeroberfläche brauchen wir uns also nicht weiter zu beschäftigen. Damit können wir uns auf den eigentlichen Sinn dieses Artikels konzentrieren, nämlich etwas über die Verbindungseigenschaften des Geräts herauszufinden.

Im Beispiel unten registriere ich den NetworkAvailabilityChanged Event Handler im Konstruktur der MainPage und frage dann alle Eigenschaften der Klasse DeviceNetworkInformation ab. Folgendenden Code können Sie in Ihrer MainPage.xaml.cs Datei verwenden.

using System;
using System.Text;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Net.NetworkInformation;

namespace Day10_NetworkInformation
{
   public partial class MainPage : PhoneApplicationPage
   {

       public MainPage()
       {
          InitializeComponent();
          DeviceNetworkInformation.NetworkAvailabilityChanged += new EventHandler<NetworkNotificationEventArgs>(DeviceNetworkInformation_NetworkAvailabilityChanged);
          GetData();
      }

      private void GetData()
      {
         StringBuilder info = new StringBuilder();
            
         if (DeviceNetworkInformation.CellularMobileOperator != null)
            info.AppendLine("carrier: " + DeviceNetworkInformation.CellularMobileOperator.ToLower());

         info.AppendLine("network: " + DeviceNetworkInformation.IsNetworkAvailable.ToString());
         info.AppendLine("roaming: " + DeviceNetworkInformation.IsCellularDataRoamingEnabled.ToString());
         info.AppendLine("cellular: " + DeviceNetworkInformation.IsCellularDataEnabled.ToString());
         info.AppendLine("wifi: " + DeviceNetworkInformation.IsWiFiEnabled.ToString());

         ContentBox.Text = info.ToString();
      }

      void DeviceNetworkInformation_NetworkAvailabilityChanged(object sender, NetworkNotificationEventArgs e)
      {
         GetData();
      }
   }
} 

Wenn Sie bis hier mit programmiert haben, können Sie die Anwendung jetzt ausführen. Wenn Sie den Windows Phone Emulator verwenden, werden Sie in etwa folgenden Bildschirm sehen.

Im nächsten Abschnitt werden wir uns die NetworkInterfaceList genauer anschauen. Diese enthält Informationen über jedes Netzwerk, mit dem das Gerät gerade verbunden ist.

Die NetworkInterfaceList benutzen

Die NetworkInterfaceList enthält eine Liste der einzelnen Netzwerke, mit denen das Gerät verbunden ist. Darin eingeschlossen sind das Handynetz, das WLAN und sogar die Ethernet-Verbindung (wenn das Telefon mit dem PC verbunden ist).

In unserem Beispiel werden wir die komplette Liste von Netzwerkschnittstellen durchgehen. Da die NetworkInterfaceList ein IEnumerable ist, können Sie aber auch komplexere Abfragen mit LINQ durchführen. Im unten stehenden Code sehen Sie, dass ich einmal durch die ganze Liste laufe, und alle Werte auf dem Bildschirm ausgebe. Ich habe hier nur die Methode GetData() vom vorherigen Beispiel wiederholt. Den Rest des Codes können Sie entsprechend übernehmen.

private void GetData()
{
   StringBuilder info = new StringBuilder();

   if (DeviceNetworkInformation.CellularMobileOperator != null)
      info.AppendLine("carrier: " + DeviceNetworkInformation.CellularMobileOperator.ToLower());

   info.AppendLine("network: " + DeviceNetworkInformation.IsNetworkAvailable.ToString());
   info.AppendLine("roaming: " + DeviceNetworkInformation.IsCellularDataRoamingEnabled.ToString());
   info.AppendLine("cellular: " + DeviceNetworkInformation.IsCellularDataEnabled.ToString());
   info.AppendLine("wifi: " + DeviceNetworkInformation.IsWiFiEnabled.ToString());

   info.AppendLine();

   foreach (var n in new NetworkInterfaceList())
   {
      info.AppendLine(n.InterfaceName.ToLower());
      info.AppendLine(n.InterfaceType.ToString());
      info.AppendLine(n.InterfaceState.ToString());
      info.AppendLine();
   }

   ContentBox.Text = info.ToString();
} 

Im Emulator werden Ihnen die folgenden Netzwerke angezeigt:

Auf einem tatsächlichen Gerät werden Sie wahrscheinlich um die 4 Netzwerke angezeigt bekommen. Auf meinem Gerät werden beispielsweise das WLAN, das Netz meiner Telefongesellschaft, die MMS Verbindung meiner Telefongesellschaft und ein Software Loopback Interface (mehr darüber hier) angezeigt.

Zusammenfassung

Heute habe ich Ihnen den Namespace NetworkInformation gezeigt. Wir haben gesehen, wie wir diesen Namespace benutzen können um festzustellen, ob das Gerät des Benutzers mit einem Netzwerk verbunden ist oder nicht.

Wenn Sie eine vollständige Anwendung mit dem Beispielcode dieses Artikels herunterladen möchten, klicken Sie auf den Download Code Button.

Morgen werden wir uns mit Live Tiles beschäftigen. Wir werden sehen, wie wir diese aus einer Anwendung heraus erstellen und verändern können.

Bis dahin!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.