2013-07-24 13 views
8

Qual è il modo più semplice per verificare se il dispositivo (smartphone) è online o offline. Sto lavorando con PhoneGap, jquery mobile. Ho trovato questo.Come controllare dispositivo è online o offline PhoneGap

document.addEventListener("online", yourCallbackFunction, false); 

Quello che voglio fare è quello di verificare la connessione a Internet e decidere in procinto di ottenere i dati da internet o dal database locale dispositivo.

if(deviceoffline) 
    getDataFromLokalDatabase(); 
else 
    getDataFromInternet(); 

risposta

9

È possibile utilizzare navigator.onLine:

var isOffline = 'onLine' in navigator && !navigator.onLine; 

if (isOffline) { 
    //local db 
} 
else { 
    // internet data 
} 

ma essere consapevoli di che, se non è supportato navigator.onLineisOffline sarà sempre falsa

+0

Okay, lo proverò normale sul browser Chrome e ottengo solo false. Ma io costruisco l'app con PhoneGap e la collaudo sul mio smartphone e funziona. Grazie NULL. U mi ha aiutato molto :) –

+0

navigator.onLine non funziona in modo affidabile, almeno non nella mia app PhoneGapp (Nexus 4 con Android 5); navigator.onLine è comunque un attributo supportato. Ho anche trovato questa domanda correlata: http://stackoverflow.com/questions/14283124/navigator-online-not-always-working. –

2

utilizzando jQuery effettuare una chiamata AJAX e controllare il codice di errore , Se si ottiene il codice di errore come 0 il dispositivo non è in linea

$.ajax({ 
    //your ajax options 
    error: function (request) { 
     if (request.status == 0) { 
      alert("you're offline"); 
     } 
    } 
}); 
+1

Lo stato 0 indica che il server non risponde alla richiesta. Questo * potrebbe * essere dovuto al fatto che il dispositivo è offline, ma non significa necessariamente che lo sia. – Jonathan

+0

tuttavia, nella maggior parte dei casi ciò che ti interessa è se la tua app può comunicare con il tuo server ... quindi è importante! – hajikelist

0

il nativo onLine è alquanto traballante, specialmente in un ambiente di app Web. Ma può essere utilizzato per un controllo iniziale su pageLoad, tuttavia è in qualche modo inutile quindi, come se si arrivasse a quel punto, si dispone di una connessione Internet.

tentare di ajax qualcosa è molto più affidabile.

10

Questo è il codice utilizzando il codice nativo PhoneGap:

function checkInternet() { 

    var networkState = navigator.connection.type; 

    if(networkState == Connection.NONE) { 

     onConnexionError(); 
     return false; 

    } else { 

     return true; 
    } 
} 
+2

si dovrebbe anche controllare 'Connection.UNKNOWN' – Mirko

1

attenzione, mentre navigator.onLine è la soluzione più semplice, non si comporta in modo coerente su tutti i browser. Su Chrome ti dirà che è online se hai un cavo LAN, anche se non hai internet.

È possibile utilizzare il plugin Cordova network-information

Si può anche provare a fare una richiesta AJAX al server; di solito vuoi sapere se sei offline perché in quel caso non puoi comunicare con il server, quindi "offline" significa spesso "non in grado di comunicare con il server" (che può essere causato anche dal fatto che il tuo server sia offline). Anche giocare con i timeout o diverse richieste è utile se devi controllare la larghezza di banda o la qualità del collegamento.

Offline non significa la stessa per ogni caso d'uso, è necessario prima di sapere quale delle tecniche di cui sopra è più adatto per voi, quindi implementare uno o più di essi.

Quello che voglio fare è quello di verificare la connessione a Internet e decidere in procinto di ottenere i dati da internet o dal database locale dispositivo.

Sembra che controllare il collegamento con il server tramite una richiesta sia l'opzione migliore per voi.

Problemi correlati