Como gerenciar eventos de conexão de rede e mudanças na disponibilidade (HTML)
[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]
Este tópico mostra como registrar-se para receber notificações de alterações no estado de conexão da rede e recuperar informações de estado atuais usando classes no namespace Windows.Networking.Connectivity.
Também fornecemos recomendações de comportamento de aplicativos que darão suporte a experiências de usuário consistentes em cenários de rede.
Pré-requisitos
Os exemplos a seguir usam JavaScript e se baseiam na Amostra de informações de rede. Para obter instruções sobre a criação de um aplicativo do Tempo de Execução do Windows em JavaScript, consulte Criar seu primeiro aplicativo do Tempo de Execução do Windows em JavaScript.
Saber o que é um ConnectionProfile e como acessar as informações que ele representa é importante; para saber mais, consulte Como recuperar informações de conexão de rede. Para obter exemplos de código adicionais, baixe o Exemplo de informações de rede.
O que qualifica como um evento de alteração do estado de conexão?
Eventos de mudança de estado indicam mudanças na disponibilidade, no tipo ou no custo da conectividade oferecida por uma conexão individual. Os últimos aplicativos conectados frequentemente encontram cenários de percurso de rede típicos para o uso de dispositivo móvel. Quando o Tempo de Execução do Windows detectar uma nova rede, ele fornecerá automaticamente uma nova opção de conectividade. Por exemplo, se um usuário está usando um dispositivo em uma rede 3G/4G para dados de fluxo e, posteriormente, entra no alcance de uma rede Wi-Fi, a nova opção de conectividade está disponível para o aplicativo usar. Obviamente, isso também significa que um usuário pode se mover além do alcance de uma rede, uma que pode até mesmo estar atualmente em uso.
Considerando todas essas possibilidades, é importante equipar seu aplicativo com a lógica que permite escolhas inteligentes ao se deparar com alterações na disponibilidade da rede. As conexões de rede existentes não passarão automaticamente para outras conexões uniformemente. Seu aplicativo precisa registrar eventos networkstatuschanged e adaptar-se de acordo.
Registrando notificações de eventos de alteração do estado de conexão
Para poder adaptar seu aplicativo às alterações de estados da rede, é necessário saber quando elas ocorrem. O código de exemplo a seguir mostra como registrar-se para receber notificações de eventos do networkstatuschanged de um perfil de conexão específico.
É necessário escrever um código para tratar exceções quando você chama a maioria dos métodos de rede assíncronos. Também os métodos no namespace Windows.Networking.Connectivity que registram para notificações de eventos ou tentam recuperar um ConnectionProfile podem gerar exceções. Seu manipulador de exceção recupera informações mais detalhadas sobre a causa da exceção para entender melhor a falha e tomar as medidas adequadas. Para saber mais, veja Como manipular exceções em aplicativos de rede.
// Define some variables used
// A variable to store network status change information
var internetProfileInfo = "";
// A boolean to keep track of registration for network status change notifications
var registeredNetworkStatusNotif = false;
var networkInfo = Windows.Networking.Connectivity.NetworkInformation;
//Register for Network Status Change notifications, and display new Internet Connection Profile information on network status change
function registerForNetworkStatusChangeNotif() {
// register for network status change notifications
if (!registeredNetworkStatusNotif) {
try {
networkInfo.addEventListener("networkstatuschanged", onNetworkStatusChange);
registeredNetworkStatusNotif = true;
if (internetProfileInfo === "") {
mySample.displayStatus("No network status change. ", "sample", "status");
}
catch (e) {
mySample.displayError("An unexpected exception occured: " + e.name + ": " + e.message);
}
}
}
Quando um cenário de rede é alterado, seu aplicativo pode precisar retirar o registro das notificações de alteração de status da rede, se já estiver registrado, e depois registrar novamente para notificações do novo cenário de rede.
//Unregister for Network Status Change notifications
function unRegisterForNetworkStatusChangeNotif() {
try {
networkInfo.removeEventListener("networkstatuschanged", onNetworkStatusChange);
internetProfileInfo = "";
}
catch (e) {
mySample.displayError("An unexpected exception occured: " + e.name + ": " + e.message, "sample", "error");
}
}
Recuperando as informações de alteração de estado de conexão
Quando ocorre uma alteração de status, o seguinte exemplo de um manipulador de eventos recupera o ConnectionProfile associado para o perfil de conexão da Internet atual. Este ConnectionProfile pode ser usado para recuperar e exibir informações de status da conexão, que inclui o escopo atual, tipo e custo de conectividade, conforme definido por NetworkConnectivityLevel, NetworkTypes e NetworkCostType.
// Event handler for Network Status Change event
function onNetworkStatusChange(sender) {
//network status changed
internetProfileInfo = "Network Status Changed: \n\r";
try {
// get the ConnectionProfile that is currently used to connect to the Internet
var internetProfile = networkInfo.getInternetConnectionProfile();
if (internetProfile === null) {
mySample.displayStatus("Not connected to Internet\n\r");
}
else {
internetProfileInfo += getConnectionProfileInfo(internetProfile) + "\n\r";
mySample.displayStatus(internetProfileInfo);
}
internetProfileInfo = "";
}
catch (e) {
mySample.displayError("An unexpected exception occured: " + e.name + ": " + e.message, "sample", "error");
}
}
São vários os estados de rede que podem ser alterados, o que resulta em um evento de alteração do estado da rede. Incluindo, se o dispositivo possui um novo ConnectionProfile, o custo de uma nova conexão, o nível de conectividade e outras alterações. O manipulador de eventos acima pode usar a classe NetworkStateChangeEventDetails para determinar o que foi alterado.
Comportamento recomendado do aplicativo ao controlar alterações de estado de conexão
A tabela a seguir descreve os principais cenários de alteração de estado de conexão e fornece recomendações sobre o comportamento do aplicativo:
Cenário | Comportamento recomendado |
---|---|
Perda de conexão em função de erro | As conexões podem ser restabelecidas ao tentar estabelecer a operação da rede novamente. Se falhar, aguarde um evento networkstatuschanged para recuperar as informações do estado de conexão atual. Nós recomendamos que os aplicativos usem um intervalo de retirada de rápido crescimento entre as repetições, começando com um valor de 50 milissegundos. |
Perda de rede | Informe o usuário que a conexão foi perdida, em seguida registre e aguarde um evento networkstatuschanged. |
Disponibilidade de nova rede | Com os dispositivos móveis, os cenários envolvendo um dispositivo passando por várias redes privadas ou públicas são comuns. Por exemplo, um usuário pode estar conectado a uma banda larga móvel e conversar com os amigos usando o aplicativo de mensagens antes ir para casa e conectar a uma rede doméstica ilimitada. A política padrão do Windows 8, Windows Server 2012 e Windows Phone 8.1 e posterior é dar preferência a uma rede ilimitada e mais rápida, ao invés de uma limitada e mais lenta. No entanto, as conexões existentes estabelecidas pelo aplicativo não alternam automaticamente para uma nova rede. O aplicativo tem de se envolver, pois só ele pode decidir quando alternar para a nova rede. Se o download de um fluxo de vídeo está perto de ser concluído, não faz sentido alternar para uma nova rede e recomeçar o download. Mas, quando a rede atual está removendo pacotes, está muito lenta ou o fluxo leva muito tempo para ser concluído, alternar para a nova rede pode ser a melhor opção. Se você acha que alternar entre redes é aceitável no caso do seu aplicativo, siga estas diretrizes quando detectar uma nova rede: 1. Verifique o custo da rede e repita a operação de rede quando houver uma conexão melhor disponível. O Windows seleciona automaticamente a rede ilimitada e mais rápida, ao invés da rede limitada e mais lenta (se disponível). 2. Quando tentar novamente, se a operação de rede for bem-sucedida, cancele a operação de rede original na rede anterior (se existir). |
Alteração do custo da rede | As redes móveis, em particular, costumam ter restrições muito específicas quanto ao uso. Se seu aplicativo encontrar uma alteração no custo da rede em função de um consumo de dados de banda larga móvel maior que 80%, custo variável ou roaming, adapte o comportamento do aplicativo detalhado em Como gerenciar restrições de custo da rede limitada. |
Observação Desenvolvedores avançados também podem optar por otimizar o comportamento do aplicativo ao repetir as operações da rede. Por exemplo, você pode desejar substituir uma conexão existente por uma nova conexão em uma rede de velocidade mais alta. Neste cenário, um desenvolvedor pode usar APIs de soquetes, como StreamSocketInformation.bandwidthStatistics, para determinar se é adequado alternar para outra conexão.
Resumo
Neste tópico, revisamos como registrar notificações de alteração do estado de conexão e como usar essas notificações para recuperar informações de estado atual do ConnectionProfile para o qual ocorreu o evento. Também recuperamos o comportamento recomendado do aplicativo ao lidar com os cenários de alteração de estado mais comuns.
Embora este tópico fale sobre disponibilidade da rede, em cenários que envolvem conexões com redes limitadas, um evento networkstatuschanged também pode representar uma alteração no custo e nas propriedades do plano de dados. Para saber mais e obter orientação sobre a melhor opção para alterar o comportamento do aplicativo nesses cenários, consulte Como gerenciar restrições de custo da rede limitada.
Tópicos relacionados
Outro
Crie seu primeiro aplicativo do Tempo de Execução do Windows em JavaScript
Como resolver exceções em aplicativos de rede
Como gerenciar restrições de custo da rede limitada
Como recuperar informações do adaptador de rede e da localidade
Como recuperar informações da conexão de rede
Como recuperar dados de uso da conexão de rede
Referência
networkStatusChangedEventHandler
Windows.Networking.Connectivity
Exemplos