Saltar para conteúdo


Foto
- - - - -

Receber evento quando estado Wifi muda


  • Por favor inicie sessão para responder
4 respostas a este tópico

#1 onaips

onaips

    Membro

  • Membros
  • PipPip
  • 31 mensagens

Mensagem publicada 20 June 2010 - 14:14

Boas pessoal, ha alguma maneira de receber em um programa um evento quando o estado do wifi muda, do tipo, se o programa está aberto e entretanto ligo-me a um ponto de acesso, receber essa alteracao sem estar a fazer pooling...Thanks

#2 santos.joni

santos.joni

    Novato

  • Membros
  • Pip
  • 8 mensagens

Mensagem publicada 23 October 2010 - 21:57

Boas, estava com esta mesma duvida.Estou a fazer uma aplicação que pretende (entre outras coisas) fazer log dos percursos do utilizador (em ficheiros no cartão). A parte complicada está em fazer a sincronização destes ficheiros com um servidor. A solução que estou a pensar adoptar passa por testar de 10 em 10 minutos (por exemplo) se existe ligação à net para poder fazer a sincronização. Alguém sabe de uma solução mais prática e eficiente? Era uma grande ajuda.Muito obrigado,Jóni

#3 pedronveloso

pedronveloso

    Veloso

  • Administradores
  • 1578 mensagens
  • S8

Mensagem publicada 24 October 2010 - 13:59

Existem muitas maneiras de saber se está ligado à internet, penso que a mais fácil seraá usando o ConnectivityManager, pois permite saber o estado da ligação.Tipo assim : ConnectivityManager cm1 = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);if (cm1.getActiveNetworkInfo().isConnected() == true)...

#4 santos.joni

santos.joni

    Novato

  • Membros
  • Pip
  • 8 mensagens

Mensagem publicada 25 October 2010 - 12:46

Muito obrigado pela resposta. Esta parte eu sei (acho que não me expliquei muito bem), o que eu pretendo é ter uma espécie de sincronização automática de dados que a minha aplicação vai gerar.Assim, o que eu precisava era de saber se existe alguma maneira de gerar um evento quando existisse uma ligação à internet disponível.Existem diversas aplicações que fazem sincronização de dados, mas penso que deve existir uma forma mais eficiente de a fazer. A solução que tenho neste momento é utilizando o ConnectivityManager que referiste e de x em x minutos verifico se está existe alguma ligação disponível.Mais uma vez obrigado,Jóni

#5 santos.joni

santos.joni

    Novato

  • Membros
  • Pip
  • 8 mensagens

Mensagem publicada 27 October 2010 - 13:59

Consegui fazer o que pretendia. Deixo parte do código abaixo, caso alguém precise. Alguma duvida é só avisar:)[code type=javascript]WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);BroadcastReceiver receiver = new WiFiScanReceiver(this); //WifiScanReceiver extends BroadcastReceiver// Register Broadcast ReceiverIntentFilter filter = new IntentFilter();filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);registerReceiver(receiver, filter);//WifiScanReceiver classpublic class WiFiScanReceiver extends BroadcastReceiver { (...) @Override public void onReceive(Context c, Intent intent) { if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){ NetworkInfo info = (NetworkInfo)intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); if(mainApp.wifiManager.getConnectionInfo().getSupplicantState().equals(SupplicantState.COMPLETED)) //tem ligação à internet }else if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)){ if(intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 4) == WifiManager.WIFI_STATE_DISABLED) //não tem ligação à internet } }}[/code]