Introdução
     No desenvolvimento de aplicações para dispositivos móveis é muito comum realizar operações que necessitem
     de uma conexão ativa com a internet. Por exemplo, pode-se precisar conectar a um web service para obter e
     enviar dados, ou transferir arquivos de/para um servidor FTP.


     Geralmente esse tipo de operação demora um pouco, dependendo da quantidade de dados a trafegar e de
     velocidade da conexão. Às vezes ocorre ainda de o aparelho não estar conectado à internet e o processo ter de
     ser interrompido. Quando essa situação é prevista pelo desenvolvedor, alguns problemas podem ser evitados,
     caso contrário, informações podem ser perdidas e/ou modificadas indevidamente devido ao processo de
     transferência de dados através da internet ter sido interrompido por falta de conexão.


     Este rápido comentário já nos permite perceber a importância de a aplicação ter conhecimento de quando há ou
     não conexão com a internet no momento da realização de certas operações. Para deixar um pouco mais claro,
     tomemos um exemplo hipotético onde temos o seguinte cenário:


     Uma aplicação de vendas mantém os dados armazenados no banco de dados local e fornece uma
     funcionalidade de “Enviar Dados”, onde o usuário transfere os dados locais para um web service (por exemplo,
     para ser lido pela empresa em uma aplicação desktop). Esse procedimento de envio de dados pode ser descrito
     a partir da seguinte sequência de passos.


1.   Ler os dados do banco local e criar um arquivo XML para envio;
2.   Apagar os dados locais para poupar espaço de armazenamento, uma vez que as informações estarão seguras
     no servidor que as receberá.
3.   Enviar o arquivo para um web service.


     É fácil perceber que se não houver conexão com a internet no momento do envio, os dados já terão sido
     excluídos da base local. Na melhor das hipóteses, será necessário ler os arquivos criados e armazenar
     novamente os dados. Se a falta de conexão fosse verificada antes de o processo ser iniciado, a perda dos dados
     da base local (ou no mínimo o “retrabalho” de ter de regravar as informações após excluí-las) poderia ser
     evitada.


     Exemplos práticos
     A seguir veremos dois exemplos de verificação do status da conexão. O primeiro mostra a forma mais básica,
     uma verificação “pontual”, onde o estado da conexão é avaliado apenas uma vez. No segundo exemplo,
     usamos um evento que é disparado sempre que a conexão é ativada/desativada, para manter uma mensagem
     atualizada na tela.


     Então podemos criar uma aplicação para Windows Phone no Visual Studio (o código apresentado aqui é válido
     tanto para o SDK 7.1 quanto para o 8.0) e na página MainPage.xaml, alterar o conteúdo do Grid LayoutRoot
     conforme a Listagem 1.


     Listagem 1: Grid LayoutRoot no primeiro exemplo


     1 <!--LayoutRoot is the root grid where all page content is placed-->
     2 <Grid x:Name="LayoutRoot" Background="Transparent">
           <Grid.RowDefinitions>
     3         <RowDefinition Height="Auto"/>
     4         <RowDefinition Height="*"/>
     5     </Grid.RowDefinitions>
     6
     7     <!--TitlePanel contains the name of the application and page title-->
           <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
     8         <TextBlock x:Name="ApplicationTitle" Text="Verificar conexão" Style="{StaticR
     9         <TextBlock x:Name="PageTitle" Text="Conexão" Margin="9,-7,0,0" Style="{Static
     10    </StackPanel>
     11
     12    <!--ContentPanel - place additional content here-->
     13    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
               <Button Name="btnVerificarConexao" Content="Verificar Conexão" VerticalAlignm
     14/>
     15    </Grid>
     16</Grid>
17
18
19

Criamos um botão e referenciamos seu evento Click ao método btnVerificarConexao_Click, o que pode ser feito
dando dois cliques sobre ele. No code behind, ou seja, no arquivo MainPage.xaml.cs esse método já deve ter
sido criado e então podemos utilizar o código visto na Listagem 2.


Listagem 2: Verificando a conexão ao clicar no botão


1
2 private void btnVerificarConexao_Click(object sender, RoutedEventArgs e)
3 {
      if (NetworkInterface.GetIsNetworkAvailable())
4     {
5          MessageBox.Show("A conexão com a internet está ATIVA!");
6     }
7     else
      {
8          MessageBox.Show("A conexão com a internet está INATIVA!");
9     }
10}
11

Observação: Para utilizar a classe NetworkInterface é necessária incluir a referência ao namespace
System.Net.NetworkInformation na seção de usings da página.


Ao executar a aplicação temos o seguinte resultado:
Figura 1: Primeiro exemplo e execução


No próximo exemplo vamos inserir um TextBlock para exibir uma mensagem constantemente na tela indicando
se a conexão está ativa ou não. Então vamos alterar o conteúdo do Grid LayoutRoot conforme a listagem
abaixo.


Listagem 3: Grid LayoutRoot para o segundo exemplo


1 <!--LayoutRoot is the root grid where all page content is placed-->
2 <Grid x:Name="LayoutRoot" Background="Transparent">
3     <Grid.RowDefinitions>
          <RowDefinition Height="Auto"/>
4         <RowDefinition Height="*"/>
5     </Grid.RowDefinitions>
6
7     <!--TitlePanel contains the name of the application and page title-->
8     <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
          <TextBlock x:Name="ApplicationTitle" Text="Verificar conexão" Style="{StaticR
9         <TextBlock x:Name="PageTitle" Text="Conexão" Margin="9,-7,0,0" Style="{Static
10    </StackPanel>
11
12    <!--ContentPanel - place additional content here-->
13    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
14        <TextBlock Name="lblConexao" Text="Conexão com a internet" VerticalAlignment=
15 />
      </Grid>
16</Grid>
17
18

Dessa vez declararemos uma variável privada para armazenar o status da conexão que será atualizado
constantemente no evento NetworkAddressChanged da classe NetworkChange. Esse evento é disparado
sempre que o IP da interface de rede sofre alteração.


Novamente utilizaremos o método GetIsNetworkAvailable da classe NetworkInterface, conforme vemos no
código C# da página MainPage, a seguir.


Listagem 4: Código da página MainPage para o segundo exemplo


1
2
3 public partial class MainPage : PhoneApplicationPage
4 {
      private bool internetConectada;
5
6
      // Constructor
7     public MainPage()
8     {
9         InitializeComponent();
10        NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler
      }
11
12    void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
13    {
14        internetConectada = NetworkInterface.GetIsNetworkAvailable();
15        if (internetConectada)
16        {
               lblConexao.Foreground = new SolidColorBrush(Colors.Green);
17             lblConexao.Text = "Conectado à Internet";
18        }
19        else
20        {
               lblConexao.Foreground = new SolidColorBrush(Colors.Red);
21             lblConexao.Text = "Sem Conexão com a Internet";
22        }
23    }
24}
25
26

Como se pode ver, a variável internetConectada pode ser acessada em qualquer ponto da classe, servindo para
os fins já comentados nesse artigo.


O resultado desse código, ao executarmos a aplicação, é apresentado a seguir.
Figura 2: Segundo exemplo em execução


Conclusão
Em geral a base para verificar a conexão está no método GetIsNetworkAvailable, como vimos nos códigos
acima. Cabe ao leitor decidir qual é o melhor ponto e momento para utilizar esse recurso.


Até o próximo artigo.

Verificando a conexão com a internet no Windows Phone

  • 1.
    Introdução No desenvolvimento de aplicações para dispositivos móveis é muito comum realizar operações que necessitem de uma conexão ativa com a internet. Por exemplo, pode-se precisar conectar a um web service para obter e enviar dados, ou transferir arquivos de/para um servidor FTP. Geralmente esse tipo de operação demora um pouco, dependendo da quantidade de dados a trafegar e de velocidade da conexão. Às vezes ocorre ainda de o aparelho não estar conectado à internet e o processo ter de ser interrompido. Quando essa situação é prevista pelo desenvolvedor, alguns problemas podem ser evitados, caso contrário, informações podem ser perdidas e/ou modificadas indevidamente devido ao processo de transferência de dados através da internet ter sido interrompido por falta de conexão. Este rápido comentário já nos permite perceber a importância de a aplicação ter conhecimento de quando há ou não conexão com a internet no momento da realização de certas operações. Para deixar um pouco mais claro, tomemos um exemplo hipotético onde temos o seguinte cenário: Uma aplicação de vendas mantém os dados armazenados no banco de dados local e fornece uma funcionalidade de “Enviar Dados”, onde o usuário transfere os dados locais para um web service (por exemplo, para ser lido pela empresa em uma aplicação desktop). Esse procedimento de envio de dados pode ser descrito a partir da seguinte sequência de passos. 1. Ler os dados do banco local e criar um arquivo XML para envio; 2. Apagar os dados locais para poupar espaço de armazenamento, uma vez que as informações estarão seguras no servidor que as receberá. 3. Enviar o arquivo para um web service. É fácil perceber que se não houver conexão com a internet no momento do envio, os dados já terão sido excluídos da base local. Na melhor das hipóteses, será necessário ler os arquivos criados e armazenar novamente os dados. Se a falta de conexão fosse verificada antes de o processo ser iniciado, a perda dos dados da base local (ou no mínimo o “retrabalho” de ter de regravar as informações após excluí-las) poderia ser evitada. Exemplos práticos A seguir veremos dois exemplos de verificação do status da conexão. O primeiro mostra a forma mais básica, uma verificação “pontual”, onde o estado da conexão é avaliado apenas uma vez. No segundo exemplo, usamos um evento que é disparado sempre que a conexão é ativada/desativada, para manter uma mensagem atualizada na tela. Então podemos criar uma aplicação para Windows Phone no Visual Studio (o código apresentado aqui é válido tanto para o SDK 7.1 quanto para o 8.0) e na página MainPage.xaml, alterar o conteúdo do Grid LayoutRoot conforme a Listagem 1. Listagem 1: Grid LayoutRoot no primeiro exemplo 1 <!--LayoutRoot is the root grid where all page content is placed--> 2 <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> 3 <RowDefinition Height="Auto"/> 4 <RowDefinition Height="*"/> 5 </Grid.RowDefinitions> 6 7 <!--TitlePanel contains the name of the application and page title--> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> 8 <TextBlock x:Name="ApplicationTitle" Text="Verificar conexão" Style="{StaticR 9 <TextBlock x:Name="PageTitle" Text="Conexão" Margin="9,-7,0,0" Style="{Static 10 </StackPanel> 11 12 <!--ContentPanel - place additional content here--> 13 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Button Name="btnVerificarConexao" Content="Verificar Conexão" VerticalAlignm 14/> 15 </Grid> 16</Grid>
  • 2.
    17 18 19 Criamos um botãoe referenciamos seu evento Click ao método btnVerificarConexao_Click, o que pode ser feito dando dois cliques sobre ele. No code behind, ou seja, no arquivo MainPage.xaml.cs esse método já deve ter sido criado e então podemos utilizar o código visto na Listagem 2. Listagem 2: Verificando a conexão ao clicar no botão 1 2 private void btnVerificarConexao_Click(object sender, RoutedEventArgs e) 3 { if (NetworkInterface.GetIsNetworkAvailable()) 4 { 5 MessageBox.Show("A conexão com a internet está ATIVA!"); 6 } 7 else { 8 MessageBox.Show("A conexão com a internet está INATIVA!"); 9 } 10} 11 Observação: Para utilizar a classe NetworkInterface é necessária incluir a referência ao namespace System.Net.NetworkInformation na seção de usings da página. Ao executar a aplicação temos o seguinte resultado:
  • 3.
    Figura 1: Primeiroexemplo e execução No próximo exemplo vamos inserir um TextBlock para exibir uma mensagem constantemente na tela indicando se a conexão está ativa ou não. Então vamos alterar o conteúdo do Grid LayoutRoot conforme a listagem abaixo. Listagem 3: Grid LayoutRoot para o segundo exemplo 1 <!--LayoutRoot is the root grid where all page content is placed--> 2 <Grid x:Name="LayoutRoot" Background="Transparent"> 3 <Grid.RowDefinitions> <RowDefinition Height="Auto"/> 4 <RowDefinition Height="*"/> 5 </Grid.RowDefinitions> 6 7 <!--TitlePanel contains the name of the application and page title--> 8 <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock x:Name="ApplicationTitle" Text="Verificar conexão" Style="{StaticR 9 <TextBlock x:Name="PageTitle" Text="Conexão" Margin="9,-7,0,0" Style="{Static 10 </StackPanel> 11 12 <!--ContentPanel - place additional content here--> 13 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
  • 4.
    14 <TextBlock Name="lblConexao" Text="Conexão com a internet" VerticalAlignment= 15 /> </Grid> 16</Grid> 17 18 Dessa vez declararemos uma variável privada para armazenar o status da conexão que será atualizado constantemente no evento NetworkAddressChanged da classe NetworkChange. Esse evento é disparado sempre que o IP da interface de rede sofre alteração. Novamente utilizaremos o método GetIsNetworkAvailable da classe NetworkInterface, conforme vemos no código C# da página MainPage, a seguir. Listagem 4: Código da página MainPage para o segundo exemplo 1 2 3 public partial class MainPage : PhoneApplicationPage 4 { private bool internetConectada; 5 6 // Constructor 7 public MainPage() 8 { 9 InitializeComponent(); 10 NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler } 11 12 void NetworkChange_NetworkAddressChanged(object sender, EventArgs e) 13 { 14 internetConectada = NetworkInterface.GetIsNetworkAvailable(); 15 if (internetConectada) 16 { lblConexao.Foreground = new SolidColorBrush(Colors.Green); 17 lblConexao.Text = "Conectado à Internet"; 18 } 19 else 20 { lblConexao.Foreground = new SolidColorBrush(Colors.Red); 21 lblConexao.Text = "Sem Conexão com a Internet"; 22 } 23 } 24} 25 26 Como se pode ver, a variável internetConectada pode ser acessada em qualquer ponto da classe, servindo para os fins já comentados nesse artigo. O resultado desse código, ao executarmos a aplicação, é apresentado a seguir.
  • 5.
    Figura 2: Segundoexemplo em execução Conclusão Em geral a base para verificar a conexão está no método GetIsNetworkAvailable, como vimos nos códigos acima. Cabe ao leitor decidir qual é o melhor ponto e momento para utilizar esse recurso. Até o próximo artigo.