Vérifiez la connexion Internet dans Android WebView (Cordova)

Je sais qu'il y a beaucoup de questions et de réponses à ce sujet dans Stackoverflow, j'ai beaucoup lu, mais aucun d'entre eux ne fonctionne.

J'ai clarifié dans le titre Android WebView car c'est la cible la plus importante, mais j'aimerais que cela fonctionne aussi dans d'autres appareils. J'ai testé le code suivant sur une application créée avec Intel XDK installé sur un SM-G355M avec Android 4.4.2 et sur Safari installé sur un iPhone 5C avec iOS 9.3.4 ;

  • Exécution de plusieurs instructions avec SQLiteDatabase.execSQL
  • GetRunningAppProcesses renvoie la liste vide sur Android M (5.1.1)
  • Définir le contexte comme nul
  • Comment obtenir un nom de fichier de ressource brute par ID?
  • Impossible d'émettre un signal dans Android
  • Un AAR peut-il inclure des dépendances transitives?
  • Tout ce que je reçois dans les deux cas est la même valeur, true (parfois je suis false même si j'ai une connexion Internet).

    J'ai essayé:

    1. navigator.onLine , il donne toujours la même valeur.
    2. document.addEventListener("online", ... ne déclenche pas
    3. ajax ne fonctionne pas, de toute façon n'affecte-t-il pas le serveur?

    Code: https://nanilab.com/stackoverflow/webview-internet-connection.php


    Option 1 :

     function option1(){ var isOffline = 'onLine' in navigator && !navigator.onLine, text = isOffline == true ? ' without connection ' : ' connected '; $('.option-one span').text(text); $('.option-one i').text('checked').hide().fadeIn(200); setTimeout(function(){ option1(); }, 1000); } 

    Option 2 :

     window.addEventListener("offline", function(){ $('.option-two span').text(' without connection'); }, false); window.addEventListener("online", function(){ $('.option-two span').text(' connected'); }, false); 

    Option 3 :

     function option3(){ $.ajax({ url: '/stackoverflow/blank.php', success: function(data){ print(' connected '); }, error: function(jqXHR, textStatus, error) { print(' without connection '); } }); function print(text){ $('.option-three span').text(text); $('.option-three i').text('checked').hide().fadeIn(200); setTimeout(function(){ option3(); }, 2000); } } 

    Application créée avec Intel XDK installé sur un SM-G355M avec Android 4.4.2

    Https://youtu.be/wHJHG5dP_eM


    Qu'est-ce que je fais mal?

  • Erreur «application non installée» sur Android
  • Impossible de déterminer si Google Play Store est installé ou non sur un appareil Android
  • Mettez le bouton dans la barre d'action sur Android
  • Android WebView onReceivedError ()
  • Android NavigationView (support de support lib) n'interagit pas correctement avec la barre d'état
  • Comment puis-je faire un débogage de cette exception NullPointer?
  • 2 Solutions collect form web for “Vérifiez la connexion Internet dans Android WebView (Cordova)”

    Apache Cordova (appelé PhoneGap) est un framework de développement mobile open-source . Il vous permet d'utiliser des technologies Web standard – HTML5, CSS3 et JavaScript pour le développement multiplateforme . Les applications s'exécutent dans des enveloppes ciblées sur chaque plate-forme et s'appuient sur des liaisons API conformes aux normes pour accéder aux capacités de chaque appareil, telles que les capteurs, les données, l' état du réseau , etc.

    Dans votre problème (Option 1):

     navigator.onLine 

    ne fonctionne pas parce que (sur Android) il est cassé (la version "brute", la visualisation web corrigée de Cordova est différente} (comme vous l'avez découvert), vous devez créer votre application WebView avec Cordova Framework . Cordova a été développé EXACTEMENT pour résoudre ce problème. Le GAP dans PhoneGap est l'écart entre la «machine virtuelle», le «sandbox» et l'accès au matériel, et c'est une plate-forme croisée.

    Autorisations Android: application / AndroidManifest.xml

     <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

    Permissions de Cordova: app / res / xml / config.xml

     <feature name="NetworkStatus"> <param name="android-package" value="org.apache.cordova.networkinformation.NetworkManager" /> </feature> 

    Guide rapide Installation de Cordova

    Goto page web pour les instructions d'installation

    https://cordova.apache.org/docs/fr/latest/guide/cli/

    Goto page web et télécharger nodejs pour votre système

    https://nodejs.org/fr/download/

    Exemple de fichier

     node-v4.5.0-x86.msi 

    Exécutez (installez-le)

     success. 

    Sur Windows:

     C:\>npm install -g cordova 

    Et vous partez vous!

    J'ai été construit votre code dans cordova, j'arrive (j'espère, problème difficile), voici quelques images de ce que j'ai jusqu'ici [pas encore dans WebView {voir la sortie navigator.userAgent dans la deuxième image} ] (Notez que l'auditeur d'événement fonctionne, O), mais pas assez bon: o (). Où sont tous les programmeurs Cordova? J'ai entendu parler de Cordova la semaine dernière:

    Image de démonstration hors ligne Image de démonstration en ligne

    Dans Chrome et Safari, si le navigateur ne peut pas se connecter à un réseau local (LAN) ou à un routeur, il est hors connexion; Toutes les autres conditions sont vraies. Donc, alors que vous pouvez supposer que le navigateur est hors-ligne lorsqu'il renvoie une fausse valeur, vous ne pouvez pas supposer qu'une valeur réelle signifie nécessairement que le navigateur peut accéder à Internet. Vous pouvez obtenir des faux positifs, par exemple dans le cas où l'ordinateur exécute un logiciel de virtualisation doté d'adaptateurs ethernet virtuels qui sont toujours "connectés". Par conséquent, si vous souhaitez vraiment déterminer le statut en ligne du navigateur, vous devriez développer des moyens supplémentaires pour le contrôle. Pour en savoir plus, consultez l'article HTML5 Rocks, http://www.html5rocks.com/fr/mobile/workingoffthegrid/

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.