Эта статья является Днем № 10 в серии под названием 31 Дней Манго .
Сегодня мы рассмотрим пространство имен NetworkInformation в Windows Phone 7.1 SDK. Этот набор API-интерфейсов дает нам представление о большом количестве данных на устройстве пользователя, так как он связан с доступностью, типом и другими данными сетевого подключения.
Что такое пространство имен NetworkInformation?
В конечном счете, это коллекция классов для Windows Phone, которые дают вам массу информации о сетевом подключении определенного устройства. В этой статье мы рассмотрим два раздела этого пространства имен:
- DeviceNetworkInformation — набор свойств, которые позволяют нам проверить, какие подключения включены на устройстве пользователя.
- NetworkInterfaceList — фактический список всех сетей, к которым подключено устройство пользователя. Это включает в себя их перевозчик, а также беспроводные сети.
Хотя есть очевидные причины знать о подключении пользователя, я слышал несколько довольно интересных способов использования этой информации в вашем приложении. Например, подумайте о приложении, которое выполняет какой-то академический тест. Вы не хотите, чтобы пользователь мог использовать Интернет для ответа на вопросы, поэтому вы можете обнаружить, что у телефона нет сетевых подключений. Или, возможно, у вас есть приложение, которое позволяет пользователям загружать новые электронные книги. Знание того, есть ли у пользователя соединение, может дать вам подсказку, что ему нужно подключиться к Интернету, прежде чем он сможет просматривать ваш каталог.
Использование DeviceNetworkInformation
DeviceNetworkInformation — это набор из пяти логических и строковых значений, которые мы можем использовать, чтобы определить, какие типы сетевых подключений доступны в данный момент пользователю. Список и описание каждого из этих значений ниже:
CellularMobileOperator | Дает вам имя сотового провайдера, к которому в данный момент подключено устройство. | строка |
IsNetworkAvailable | Наиболее распространенное значение, которое вы будете использовать, это только определяет, имеет ли устройство сетевое подключение. Это не определяет доступ в интернет, только то, что телефон подключен к сети. | логический |
IsCellularDataEnabled | Показывает, есть ли на устройстве пользователя сотовые данные. | логический |
IsCellularDataRoamingEnabled | Показывает, разрешает ли пользователь роуминг сотовых данных. По умолчанию это обычно значение false. | логический |
IsWifiEnabled | Определяет, включен ли на устройстве Wi-Fi. | логический |
NetworkAvailabilityChanged | Это обработчик событий, который мы можем использовать для распознавания изменений в сетевом подключении устройства. |
Чтобы начать создавать наше приложение, на этот раз я сделал пользовательский интерфейс невероятно простым. Мы только добавляем TextBlock внутри элемента управления ScrollViewer. Если вы создавали приложения вместе с предыдущими статьями, вы знакомы с инструкцией. Следующий код является вашим XAML-интерфейсом для файла 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>
Мы будем записывать все наши значения в этот TextBlock в этом приложении, поэтому мы не будем пересматривать пользовательский интерфейс. На самом деле довольно скучно, но это позволяет нам сосредоточиться на цели этой статьи, которая использует C # для определения сетевых возможностей устройства нашего пользователя.
В приведенном ниже примере вы увидите, что я регистрирую обработчик события NetworkAvailabilityChanged в методе MainPage (), а затем извлекаю все значения из класса DeviceNetworkInformation. Вы можете использовать этот код в вашем файле MainPage.xaml.cs.
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(); } } }
Если вы писали код вместе с этой статьей, вы можете запустить свой проект на этом этапе. Вы увидите экран, похожий на изображение ниже, если вы используете эмулятор Windows Phone.
В следующем разделе мы рассмотрим NetworkInterfaceList, который содержит информацию о каждой из сетей, к которым в данный момент подключено устройство.
Использование NetworkInterfaceList
NetworkInterfaceList содержит список каждой из отдельных сетей, к которым подключено устройство пользователя. Это включает в себя беспроводные сети, сотовые сети и даже Ethernet-соединение, которое используют телефоны Windows при подключении к ПК.
В нашем примере мы собираемся перебрать всю коллекцию сетей, но, поскольку NetworkInterfaceList является IEnumerable, вы можете анализировать его практически любым способом, каким вы хотите использовать LINQ. В приведенном ниже коде вы увидите, что я просто перебираю весь список, записывая каждый из них на экран, чтобы пользователь мог видеть все, к чему он в данный момент подключен. Я включил только метод 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()); 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(); }
Используя эмулятор, вы получите следующие сети, перечисленные в вашем приложении:
На реальном устройстве вы, вероятно, получите около 4 сетей в вашем списке. Например, у меня есть беспроводное соединение, интернет-соединение моего оператора, MMS-соединение моего оператора и программный интерфейс обратной связи (о котором вы можете прочитать здесь ).
Резюме
Сегодня я показал пространство имен NetworkInformation и то, как мы можем использовать его в наших приложениях, чтобы определить, подключено ли пользовательское устройство к сети или, в некоторых случаях, не подключено.
Если вы хотите загрузить полный пример приложения, созданного в этой статье, вы можете загрузить его с помощью кнопки «Загрузить код» ниже.
Завтра мы рассмотрим Live Tiles и то, как мы можем сейчас создавать и редактировать их из наших приложений. Увидимся позже!
Источник:
http://www.jeffblankenburg.com/2011/11/10/31-days-of-mango-day-10-network-information/