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

Windows Phone: Verificando a conexão com a internet

Embed Size (px)

DESCRIPTION

Veja neste artigo com verificar o estado da conexão com a internet (ativa/inativa) a partir de aplicações Silverlight para Windows Phone. O código apresentado é válido tanto para a versão do SDK 7.1 quanto para a 8.0.

Citation preview

Page 1: Windows Phone: Verificando a conexão com a internet

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 webservice 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 webservice (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 webservice.

É 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<!--LayoutRoot is the root grid where all page content is placed--> <Grid x:Name="LayoutRoot"Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions>

<!--TitlePanel contains the name of the application and page title--> <StackPanel x:Name="TitlePanel"Grid.Row="0"Margin="12,17,0,28"> <TextBlock x:Name="ApplicationTitle"Text="Verificar conexão"Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="PageTitle"Text="Conexão"Margin="9,-7,0,0"Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel>

<!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel"Grid.Row="1"Margin="12,0,12,0"> <Button Name="btnVerificarConexao"Content="Verificar Conexão"VerticalAlignment="Center"Click="btnVerificarConexao_Click" /> </Grid> </Grid>

Page 2: Windows Phone: Verificando a conexão com a internet

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 codebehind, 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

3

4

5

6

7

8

9

10

11

private void btnVerificarConexao_Click(object sender, RoutedEventArgs e) { if(NetworkInterface.GetIsNetworkAvailable()) { MessageBox.Show("A conexão com a internet está ATIVA!"); } else { MessageBox.Show("A conexão com a internet está INATIVA!"); } }

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

Ao executar a aplicação temos o seguinte resultado:

Page 3: Windows Phone: Verificando a conexão com a internet

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

2

3

4

5

6

7

8

9

10

11

12

13

<!--LayoutRoot is the root grid where all page content is placed--> <Grid x:Name="LayoutRoot"Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions>

<!--TitlePanel contains the name of the application and page title--> <StackPanel x:Name="TitlePanel"Grid.Row="0"Margin="12,17,0,28"> <TextBlock x:Name="ApplicationTitle"Text="Verificar conexão"Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="PageTitle"Text="Conexão"Margin="9,-7,0,0"Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel>

<!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel"Grid.Row="1"Margin="12,0,12,0">

Page 4: Windows Phone: Verificando a conexão com a internet

14

15

16

17

18

<TextBlock Name="lblConexao"Text="Conexão com a internet"VerticalAlignment="Center"FontSize="40"HorizontalAlignment="Center"TextWrapping="Wrap"TextAlignment="Center"/> </Grid> </Grid>

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

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

public partial class MainPage : PhoneApplicationPage { private bool internetConectada; // Constructor public MainPage() { InitializeComponent(); NetworkChange.NetworkAddressChanged += newNetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged); } void NetworkChange_NetworkAddressChanged(object sender, EventArgs e) { internetConectada = NetworkInterface.GetIsNetworkAvailable(); if(internetConectada) { lblConexao.Foreground = newSolidColorBrush(Colors.Green); lblConexao.Text = "Conectado à Internet"; } else { lblConexao.Foreground = newSolidColorBrush(Colors.Red); lblConexao.Text = "Sem Conexão com a Internet"; } } }

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.

Page 5: Windows Phone: Verificando a conexão com a internet

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.