DevCorner620

DevCorner: controlliamo lo stato della connessione [METEO]

Roberto Orgiu

La scorsa puntata era incentrata sul creare dei Dialog che potessero avvisare i nostri utenti dei vari avvenimenti che possono verificarsi durante l’utilizzo di un’applicazione Android ma, fino ad ora, abbiamo sempre dato per scontato che saremmo stati sempre online. Purtroppo per noi, poche cose sono più false di questa e, nel corso di questo episodio, scopriremo perché.

LEGGI ANCHE: creiamo un reader per i feed RSS

Per prima cosa, aggiungiamo al file Manifest dell’applicazione i due permessi seguenti:

android.permission.ACCESS_WIFI_STATE
android.permission.ACCESS_NETWORK_STATE

Grazie a queste due nuove stringhe, potremo controllare lo stato della connessione del dispositivo ed agire di conseguenza, utilizzando questo metodo statico per i nostri check:

public static boolean isOnline(Context context) {
   ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
   NetworkInfo info = manager.getActiveNetworkInfo();
   if (info != null) {
      return info.isConnected();
   } else {
      return false;
   }
        }

Nella sua semplicità, questa funzione ci propone diversi spunti di riflessione: come possiamo notare, il metodo è statico, in modo tale che l’istanza del Context passato come parametro non venga ritenuta e non si rischino quindi leak che potrebbero condurci ad un eccessivo consumo di memoria e quindi un rallentamento generale della nostra app.

Il Context è, nostro malgrado, molto importante perché ci permette di richiedere al sistema di poter utilizzare il servizio di gestione della connettività (linea 2), al quale potremo richiedere le informazioni sulla connessione di rete correntemente attiva (riga 3). A questo punto, se quest’ultimo oggetto è nullo, è perché siamo fisicamente disconnessi dalla rete e possiamo quindi dedurre con relativa certezza che non possiamo scambiare dati. Purtroppo, il fatto che info non sia null, non implica che siamo connessi ad internet, ed è proprio per questa ragione che invochiamo il metodo isConnected(): questa chiamata, ci dirà con certezza se esiste una connessione dati ed è quindi possibile effettuare richieste remote.

Perché quindi un intero articolo solamente sulla gestione della connettività quando la soluzione era così banale? Perché questo è senza dubbio uno dei tasselli portanti della nostra app: normalmente, diamo per scontato di essere connessi ad internet alla massima velocità disponibile, ma non è così e, molto spesso, il nostro dispositivo si trova in una fase di switch tra due diverse frequenze (se non addirittura protocolli) e non siamo fisicamente connessi ad internet.

Siamo quindi giunti al termine di questo episodio e, come al solito, vi invitiamo a discutere nel forum di tutte le idee o i problemi inerenti lo sviluppo su Android. Buona programmazione a tutti!

badge-forum (1)

Android SDK