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.
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ã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:
3. 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">
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: 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.