Autore Topic: Verificare la presenza di una connessione di rete (Wifi o Mobile)  (Letto 9046 volte)

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
+2
È facilmente verificabile utilizzando gli strumenti messi a disposizione dal framework di android ;)
Codice (Java): [Seleziona]
public boolean isOnline() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        return cm.getActiveNetworkInfo().isConnectedOrConnecting();
}

Codice (Java): [Seleziona]
        if(isOnline()){
                Toast.makeText(this, "Connessione disponibile", Toast.LENGTH_LONG).show();
        }else{
                Toast.makeText(this, "Connessione NON disponibile", Toast.LENGTH_LONG).show();
        }

Richiede ovviamente il seguente permesso:
Codice (XML): [Seleziona]
<uses-permission
        android:name="android.permission.ACCESS_NETWORK_STATE" />
« Ultima modifica: 20 Giugno 2010, 13:11:55 CEST da JD »
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #1 il: 14 Settembre 2010, 13:52:52 CEST »
+1
cm.getActiveNetworkInfo() può ritornare null, ip per evitare problemi l'ho modificato così:
Codice (Java): [Seleziona]
                public boolean isOnline () {
                        ConnectivityManager cm = ( ConnectivityManager ) m_context.getSystemService( Context.CONNECTIVITY_SERVICE );

                        NetworkInfo ni = cm.getActiveNetworkInfo();
                       
                        if(ni == null)
                                return false;

                        return ni.isConnected();
                }

Offline DX89B

  • Utente junior
  • **
  • Post: 121
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Play Store ID:
    Daniele Bonadiman
  • Sistema operativo:
    Mac OS X 10.6
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #2 il: 14 Settembre 2010, 14:00:54 CEST »
0
non prevede tutto xò, io ad esempio ho un problema con questa , essendo in università devo autenticarmi su una pagina del browser per poter accedere ad internet. questa funzione risulterebbe true e come nel mio caso finirei a fare il parsing XML della pagina di login dell'università :)

penso che per risolvere questo problema si potrebbe fare una sorta di ping , ma non so come :)

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #3 il: 19 Settembre 2010, 15:51:44 CEST »
0
Stavo provando a verificare l'effettiva connessione ad Internet, ma requestRouteToHost() mi restituisce sempre false :(

Qualche consiglio?

Codice (Java): [Seleziona]
        public static boolean isOnline(Context context) {
                ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo[] ni = cm.getAllNetworkInfo();

                boolean online =  false;
                int i = 0;
                NetworkInfo n;
                do{
                        System.out.println(i+"");
                        n = ni[i];
                        if (n.isConnected()){
                                System.out.println("ni["+i+"] isConnected");
                                int addr = lookupHost("www.google.com");
                                System.out.println("addr="+addr);
                                if(cm.requestRouteToHost(n.getType(), addr)){
                                        online =  true;
                                        System.out.println(i + " requestRouteToHost");
                                }
                        }
                        i++;
                }while(i < ni.length && online == false);

                return online;
        }

        /**
         * Look up a host name and return the result as an int. Works if the argument
         * is an IP address in dot notation. Obviously, this can only be used for IPv4
         * addresses.
         * @param hostname the name of the host (or the IP address)
         * @return the IP address as an {@code int} in network byte order
         */

        private static int lookupHost(String hostname) {
                InetAddress inetAddress;
                try {
                        inetAddress = InetAddress.getByName(hostname);
                } catch (UnknownHostException e) {
                        Log.d("TAG", "Failed to resolve address: " + hostname);
                        return -1;
                }
                Log.d("TAG", "Resolved Address: " + inetAddress.toString());
                byte[] addrBytes;
                int addr;
                addrBytes = inetAddress.getAddress();
                addr = ((addrBytes[3] & 0xff) << 24)
                | ((addrBytes[2] & 0xff) << 16)
                | ((addrBytes[1] & 0xff) << 8)
                |  (addrBytes[0] & 0xff);
                return addr;
        }
« Ultima modifica: 19 Settembre 2010, 15:53:58 CEST da JD »
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline DX89B

  • Utente junior
  • **
  • Post: 121
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Play Store ID:
    Daniele Bonadiman
  • Sistema operativo:
    Mac OS X 10.6
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #4 il: 19 Settembre 2010, 16:00:55 CEST »
0
ho paura che sia
Codice (Java): [Seleziona]
private static int lookupHost(String hostname) {
                InetAddress inetAddress;
                try {
                        inetAddress = InetAddress.getByName(hostname);
                } catch (UnknownHostException e) {
                        Log.d("TAG", "Failed to resolve address: " + hostname);
                        return -1;
                }
                Log.d("TAG", "Resolved Address: " + inetAddress.toString());
                byte[] addrBytes;
                int addr;
                addrBytes = inetAddress.getAddress();
                addr = ((addrBytes[3] & 0xff) << 24)
                | ((addrBytes[2] & 0xff) << 16)
                | ((addrBytes[1] & 0xff) << 8)
                |  (addrBytes[0] & 0xff);
                return addr;
        }

a non funzionare , nn capisco, l'indirizzo risultante, in che forma è scritto?
come si scrive un ip XXX.XXX.XXX.XXX sotto forma di intero??

io avevo trovato questo snippet su internet quindi nn so


utilizzando un convertitore ip to int che ho trovato su internet ottengo che l'ip di google è

2915181672

palesemente fuori dal range int quindi non saprei come viene effetuata questa trasformazione

Edit:

prova
Codice (Java): [Seleziona]
lookupHost("173.194.36.104") ) l'ip dovrebbe essere quello di google

Google

e qua non si trova niente come al solito
____________________

mmmh soluzione trovata, sfruttando il caro vecchio linux
o almeno ho trovato il problema.

se utilizzi anche tu una connessione con proxy posso assicurarti che il problema è nella funzione request route to host

allora anche un ping a questi server nella situazione in cui mi trovo, rete universitaria fallisce, secondo me la funzione utilizza una cosa del genere

Codice (Java): [Seleziona]
Runtime runtime = Runtime.getRuntime();
                        Process proc = runtime.exec("ping -c 1 www.google.it"); // other servers, for example
                        try {
                                proc.waitFor();
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        int exit = proc.exitValue();
                        if (exit == 0) { Log.i("connect ", " ok ");
                        } else { Log.i("connect ", " no ");
                           
                        }
               

questa funzione infatti "passa" se pingo i siti dell univeristà ma se pingo google facebook anddev ecc ecc mi restituisce no lo stesso eseguendo il ping dal computer

confermo tutto il ping a qualsiasi sito si schianta sul proxy , ho testato con traceroute


« Ultima modifica: 19 Settembre 2010, 17:05:59 CEST da DX89B »

Offline alepio

  • Utente normale
  • ***
  • Post: 163
  • Respect: +3
    • Google+
    • 107850838
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG ACE
  • Play Store ID:
    Alessandro Piola
  • Sistema operativo:
    WIN 7
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #5 il: 02 Novembre 2010, 14:29:31 CET »
0
ciao,
avete poi trovato una soluzione al problema?
-----------------------------------------------------
Con RISPARMIO BATTERIA - Battery Saver puoi anche dimenticarti a casa il carica batteria. Inoltre con gli EXTRAS puoi configurare la navigazione e disattivare i banner pubblicitari. Battery Saver controlla in automatico lo stato dello schermo.Se è spento disattiva WIFI e NAVIGAZIONE MOBILE, per poi riaccenderle a schermo attivo.
[APP] BatterySaver - Android Developers Italia
--------

Offline MrKrabs

  • Utente junior
  • **
  • Post: 94
  • Respect: +4
    • Mostra profilo
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #6 il: 01 Febbraio 2011, 22:33:41 CET »
+4
Posto questo link in caso fosse utile...a me funziona alla perfezione!  ;-)

http://androidadvice.blogspot.com/2010/09/check-android-network-connection-sample.html

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #7 il: 28 Marzo 2011, 08:16:06 CEST »
+3
Io, tempo fa, l'avevo fatta così:
Codice (Java): [Seleziona]
                //Controlla se c'è connessione ad internet in 5 secondi
                public boolean isConnectivity(Context context){
                        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                        URL url;
                       
                       
                        if (connectivity.getActiveNetworkInfo()!=null
                                && connectivity.getActiveNetworkInfo().isAvailable()
                                && connectivity.getActiveNetworkInfo().isConnected())  {

                                try {
                                        url = new URL("http://www.google.it");
                                        HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
                                        httpConn.setConnectTimeout(5000);
                                        httpConn.connect();
                                        return true;
                               
                                } catch (MalformedURLException e) {
       
                                        return false;
                                       
                                } catch (Exception e) {
                               
                                        return false;
                                }  
                        } else {return false;}
                       
                       
                }      

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #8 il: 07 Aprile 2011, 14:41:29 CEST »
0
Salve a tutti, io ho provato queste funzioni, ma mi restituiscono sempre false, pur avendo sia la connessione lan che wireless cul pc attivate... Avete qualche idea? Ah, ho provato anche quella del link...
Risparmia l'acqua, bevi birra...

Offline thejungle

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #9 il: 15 Aprile 2011, 15:22:14 CEST »
0
edit.

risolto il mio problema. ribadisco che la classe linkata da MrKrabs è perfettamente funzionante ;)
« Ultima modifica: 15 Aprile 2011, 18:57:15 CEST da thejungle »

Offline Acca.Emme

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Ubuntu
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #10 il: 21 Gennaio 2013, 09:53:34 CET »
0
Nessuna novità?
Mi interesserebbe come "bloccare" l'utilizzo dell'applicazione in assenza di connessione :) Grazie

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #11 il: 21 Gennaio 2013, 10:15:43 CET »
+1
Ciao, e' da parecchio che non leggevo questo post e lo avevo completamente scordato. Ora il problema l'ho risolto e uso questa funzione di utilita':
Codice (Java): [Seleziona]
      /**
         * controlla se e' presenta la connessione ad internet, sia mobile che wi-fi
         *
         * @param context il context dell'applicazione
         * @return true se il dispositivo e' connesso ad internet (wi-fi o mobile), false altrimenti
         */

        public static Boolean isDeviceConnected(Context context) {

                ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

                NetworkInfo mobileDataInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
                NetworkInfo wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

                if (mobileDataInfo.getState() != NetworkInfo.State.CONNECTED && wifiInfo.getState() != NetworkInfo.State.CONNECTED) {
                        return false;
                }

                return true;
        }

Spero ti possa essere utile.
Risparmia l'acqua, bevi birra...

Offline Acca.Emme

  • Nuovo arrivato
  • *
  • Post: 38
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Ubuntu
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #12 il: 21 Gennaio 2013, 17:38:07 CET »
0
Grazie mille, proverò il codice quanto prima! :)

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #13 il: 21 Gennaio 2013, 17:41:23 CET »
0
Di nulla. Penso che ti vada bene, altrimenti potrebbe essere qualche configurazione che nn e' corretta. Facci sapere, ciao!
Risparmia l'acqua, bevi birra...

Offline pegaso993

  • Utente junior
  • **
  • Post: 84
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    note 2
  • Sistema operativo:
    android
Re:Verificare la presenza di una connessione di rete (Wifi o Mobile)
« Risposta #14 il: 25 Settembre 2013, 23:47:27 CEST »
0
A me non ritorna nulla ;(