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

31 Tage Mango | Tag #10: Network Information

Die­ser Arti­kel ist Tag #10 der Serie 31 Tage Man­go von Jeff Blan­ken­burg.

Der Ori­gi­nal­ar­ti­kel befin­det sich hier: Day #10: Net­work Infor­ma­ti­on.

Heu­te schau­en wir uns den Name­space Net­work­In­for­ma­ti­on aus dem Win­dows Pho­ne 7.1 SDK an. Die dar­in ent­hal­te­nen APIs geben uns reich­hal­ti­ge Infor­ma­tio­nen über die Daten­ver­bin­dung eines Geräts. Wir erfah­ren über die Daten­ver­bin­dung z.B. die Ver­füg­bar­keit, den Typ, usw.

Was beinhaltet der Namespace NetworkInformation?

Der Net­work­In­for­ma­ti­on Name­space ent­hält eine Rei­he von Klas­sen, die Ihnen Infor­ma­tio­nen über die Daten­ver­bin­dung des betref­fen­den Geräts geben. Auf zwei Aus­schnit­te aus dem Name­space gehen wir im heu­ti­gen Arti­kel aus­führ­li­cher ein:

  • Device­Net­work­In­for­ma­ti­on — Eine Rei­he von Eigen­schaf­ten um zu erfah­ren, wel­che Ver­bin­dungs­ar­ten auf dem Gerät akti­viert sind.
  • Net­work­In­ter­face­List — Eine Lis­te aller Netz­wer­ke, mit denen das Gerät des Anwen­ders ver­bun­den ist. Die­se Lis­te beinhal­tet sowohl das Netz­werk der Tele­fon­ge­sell­schaft als auch draht­lo­se Netz­wer­ke.

Abge­se­hen von den offen­sicht­li­chen Grün­den, sich für die Daten­ver­bin­dung des Geräts zu inter­es­sie­ren, habe ich von eini­gen ziem­lich inter­es­san­ten Nut­zungs­sze­na­ri­en gehört. Stel­len Sie sich eine Anwen­dung vor, die eine Art aka­de­mi­scher Prü­fung durch­führt. Hier wür­de man natür­lich ver­mei­den wol­len, dass der Anwen­der das Inter­net zur Beant­wor­tung der Fra­gen ver­wen­det. Man wür­de also über­prü­fen, dass das Tele­fon wirk­lich kei­ne Daten­ver­bin­dung hat. Oder viel­leicht haben Sie eine Anwen­dung, mit wel­cher der Anwen­der neue E‑Books her­un­ter­la­den kann. Abhän­gig von den Ver­bin­dungs­ei­gen­schaf­ten könn­te man den Anwen­der infor­mie­ren, dass er erst eine Daten­ver­bin­dung akti­vie­ren muss, bevor er den Kata­log anse­hen kann.

DeviceNetworkInformation benutzen

Device­Net­work­In­for­ma­ti­on ist eine Men­ge von fünf Bool­schen und String Varia­blen, mit denen wir erfah­ren kön­nen, was für eine Daten­ver­bin­dung der Anwen­der zur Zeit hat. Hier ist eine Lis­te mit Beschrei­bun­gen der ein­zel­nen Wer­te:

Cel­lu­lar­Mo­bi­le­Ope­ra­tor Gibt Ihnen den Namen der Tele­fon­ge­sell­schaft, mit der das Gerät gera­de ver­bun­den ist. string
IsNet­wor­kA­vail­ab­le Die­ser Wert gibt nur an, ob übehaupt eine Daten­ver­bin­dung ver­füg­bar ist. Die­sen wer­den Sie wahr­schein­lich am häu­figs­ten ver­wen­den. Der Wert gibt aller­dings nicht an, ob auch eine Inter­net­ver­bin­dung besteht. Er sagt ledig­lich aus, dass das Tele­fon mit einem Netz­werk ver­bun­den ist. boole­an
IsCel­lu­lar­Da­ta­En­ab­led Zeigt Ihnen an, ob eine Daten­ver­bin­dung über das Han­dy­netz besteht. boole­an
IsCel­lu­lar­Da­ta­Roa­min­gEn­ab­led Zeigt an, ob Daten­roa­ming akti­viert ist. Die­ser Wert ist nor­ma­ler­wei­se auf fal­se. boole­an
IsWi­fi­En­ab­led Fragt ab, ob WLAN akti­viert ist. boole­an
Net­wor­kA­vai­la­bi­li­ty­Ch­an­ged Die­sen Event Hand­ler kön­nen wir ver­wen­den, um über eine Ände­rung bei der Daten­ver­bin­dung des Geräts unter­rich­tet zu wer­den.  

Die Benut­zer­ober­flä­che ist die­ses Mal extrem ein­fach. Wir fügen nur einen Text­Block inner­halb eines Scroll­View­er Con­trols hin­zu. Wenn Sie die Anwen­dun­gen der ver­gan­ge­nen Tage schon mit gebaut haben, ken­nen Sie sich bereit aus. Das fol­gen­de Code­bei­spiel ent­hält die XAML Ober­flä­che für unse­re 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 wer­den in der heu­ti­gen Anwen­dung ein­fach alle Wer­te in die­sen Text­Block schrei­ben. Mit der Benut­zer­ober­flä­che brau­chen wir uns also nicht wei­ter zu beschäf­ti­gen. Damit kön­nen wir uns auf den eigent­li­chen Sinn die­ses Arti­kels kon­zen­trie­ren, näm­lich etwas über die Ver­bin­dungs­ei­gen­schaf­ten des Geräts her­aus­zu­fin­den.

Im Bei­spiel unten regis­trie­re ich den Net­wor­kA­vai­la­bi­li­ty­Ch­an­ged Event Hand­ler im Kon­struk­tur der Main­Page und fra­ge dann alle Eigen­schaf­ten der Klas­se Device­Net­work­In­for­ma­ti­on ab. Fol­gen­den­den Code kön­nen Sie in Ihrer MainPage.xaml.cs Datei ver­wen­den.

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 pro­gram­miert haben, kön­nen Sie die Anwen­dung jetzt aus­füh­ren. Wenn Sie den Win­dows Pho­ne Emu­la­tor ver­wen­den, wer­den Sie in etwa fol­gen­den Bild­schirm sehen.

Im nächs­ten Abschnitt wer­den wir uns die Net­work­In­ter­face­List genau­er anschau­en. Die­se ent­hält Infor­ma­tio­nen über jedes Netz­werk, mit dem das Gerät gera­de ver­bun­den ist.

Die NetworkInterfaceList benutzen

Die Net­work­In­ter­face­List ent­hält eine Lis­te der ein­zel­nen Netz­wer­ke, mit denen das Gerät ver­bun­den ist. Dar­in ein­ge­schlos­sen sind das Han­dy­netz, das WLAN und sogar die Ether­net-Ver­bin­dung (wenn das Tele­fon mit dem PC ver­bun­den ist).

In unse­rem Bei­spiel wer­den wir die kom­plet­te Lis­te von Netz­werk­schnitt­stel­len durch­ge­hen. Da die Net­work­In­ter­face­List ein IEnu­me­ra­ble ist, kön­nen Sie aber auch kom­ple­xe­re Abfra­gen mit LINQ durch­füh­ren. Im unten ste­hen­den Code sehen Sie, dass ich ein­mal durch die gan­ze Lis­te lau­fe, und alle Wer­te auf dem Bild­schirm aus­ge­be. Ich habe hier nur die Metho­de Get­Da­ta() vom vor­he­ri­gen Bei­spiel wie­der­holt. Den Rest des Codes kön­nen Sie ent­spre­chend über­neh­men.

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 Emu­la­tor wer­den Ihnen die fol­gen­den Netz­wer­ke ange­zeigt:

Auf einem tat­säch­li­chen Gerät wer­den Sie wahr­schein­lich um die 4 Netz­wer­ke ange­zeigt bekom­men. Auf mei­nem Gerät wer­den bei­spiels­wei­se das WLAN, das Netz mei­ner Tele­fon­ge­sell­schaft, die MMS Ver­bin­dung mei­ner Tele­fon­ge­sell­schaft und ein Soft­ware Loop­back Inter­face (mehr dar­über hier) ange­zeigt.

Zusammenfassung

Heu­te habe ich Ihnen den Name­space Net­work­In­for­ma­ti­on gezeigt. Wir haben gese­hen, wie wir die­sen Name­space benut­zen kön­nen um fest­zu­stel­len, ob das Gerät des Benut­zers mit einem Netz­werk ver­bun­den ist oder nicht.

Wenn Sie eine voll­stän­di­ge Anwen­dung mit dem Bei­spiel­code die­ses Arti­kels her­un­ter­la­den möch­ten, kli­cken Sie auf den Down­load Code But­ton.

Mor­gen wer­den wir uns mit Live Tiles beschäf­ti­gen. Wir wer­den sehen, wie wir die­se aus einer Anwen­dung her­aus erstel­len und ver­än­dern kön­nen.

Bis dahin!

Schreibe einen Kommentar

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