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
Receber evento quando estado Wifi muda
Iniciado por
onaips
, Jun 20 2010 14:14
4 respostas a este tópico
#1
Mensagem publicada 20 June 2010 - 14:14
#2
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
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
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
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]