2014-09-04 6 views
9

Ich habe rund um den Tag für die Antwort zu diesem Thema gesucht und die Google-Kugel hat keine Antworten zur Verfügung gestellt. Ich habe alles versucht, was ich kann und habe die vorgeschlagenen Lösungen und Antworten durchgearbeitet und nichts hat funktioniert. zu erfassen sowohl den Netzwerkstatus und die Art der NetzwerkverbindungPhonegap Network Connection - Kann nicht lesen Eigenschaft "Typ" von undefined

Auf den Punkt gebracht Ich versuche, eine Phonegap App für Android und Apple Mobile-Geräte und eine der Funktionen, die ich brauchen, ist zu entwickeln. Unten ist der Code, den ich verwende.

Die Firing device ready Warnung löst aus und dann erhalte ich den Fehler Cannot read property 'type' of undefined gefolgt von dem Durchschleifen des Navigator Objekts. Wenn ich durch jede dieser Eigenschaften des Objekts gehe, sehe ich weder die connection Eigenschaft noch die network Eigenschaft, wie sie in älteren Versionen verwendet wurde.

Wer hat irgendwelche Ideen?

index.html

<!DOCTYPE html> 
<html> 
<head> 

<meta name="viewport" content="width=device-width, initial-scale=1.0"> 

<!-- jQuery Core --> 
<script src="js/jquery-1.11.1.min.js"></script> 
<!-- The main engine for the software. --> 
<script src="js/main.js"></script> 

<!-- Third party plugins --> 
<script type="text/javascript" src="cordova.js"></script> 
<script type="text/javascript" src="barcodescanner.js"></script> 
<script type="text/javascript" src="childbrowser.js"></script> 
<script type="text/javascript" src="js/barcode.js"></script> 

<title>index</title> 

<script> 
document.addEventListener("deviceready", onDeviceReady, false); 
</script> 

</head> 
<body> 


<script> 
barcode_app.initialize(); 
</script> 

</body> 
</html> 

main.js

function onDeviceReady(){ 
    alert('Firing device ready'); 
    try{ 
     var networkState = navigator.connection.type; 

     var states = {}; 
     states[Connection.UNKNOWN] = 'Unknown connection'; 
     states[Connection.ETHERNET] = 'Ethernet connection'; 
     states[Connection.WIFI]  = 'WiFi connection'; 
     states[Connection.CELL_2G] = 'Cell 2G connection'; 
     states[Connection.CELL_3G] = 'Cell 3G connection'; 
     states[Connection.CELL_4G] = 'Cell 4G connection'; 
     states[Connection.NONE]  = 'No network connection'; 

     $("#system_popup").html('Connection type: ' + states[networkState]); 
     $("#system_popup").popup("open") 
     //alert('Connection type: ' + states[networkState]); 
    }catch(e){ 
     alert(e); 
     $.each(navigator, function(key, value){ 
      alert(key+' => '+value); 
     }); 
    } 
} 

Und in meinem config.xml ich habe:

<plugin 
     name="NetworkStatus" 
     value="org.apache.cordova.NetworkManager" /> 

<gap:config-file platform="android" parent="/manifest"> 
     <uses-permission name="android.permission.ACCESS_NETWORK_STATE" /> 
    </gap:config-file> 

    <gap:config-file platform="android" parent="/manifest"> 
     <uses-permission name="android.permission.INTERNET" /> 
    </gap:config-file> 

    <gap:config-file platform="android" parent="/manifest"> 
     <uses-permission name="android.permission.READ_PHONE_STATE" /> 
    </gap:config-file> 

<feature name="http://api.phonegap.com/1.0/device" /> 
    <feature name="NetworkStatus"> 
     <param name="android-package" value="org.apache.cordova.NetworkManager" /> 
     <param name="ios-package" value="CDVConnection" /> 
    </feature> 










UPDATE: SOLUTION

Eine Lösung wurde schließlich durch die gemeinsamen Anstrengungen von @Dawson Loudon und @benka formuliert. Dawson korrigiert das Plugin war ich mit, welche hätte sein sollen:

<gap:plugin 
     name="org.apache.cordova.network-information" 
     version="0.2.7" /> 

Und das wirklich funktioniert nur richtig nach der Umsetzung der kurzen Verzögerung durch @benka erwähnt. So, jetzt der Arbeits Code wie folgt aussieht in JavaScript:

function onDeviceReady(){ 
    try{ 
     var networkState = navigator.connection && navigator.connection.type; 

     setTimeout(function(){ 
      networkState = navigator.connection && navigator.connection.type; 

      var states = {}; 
      states[Connection.UNKNOWN] = 'Unknown connection'; 
      states[Connection.ETHERNET] = 'Ethernet connection'; 
      states[Connection.WIFI]  = 'WiFi connection'; 
      states[Connection.CELL_2G] = 'Cell 2G connection'; 
      states[Connection.CELL_3G] = 'Cell 3G connection'; 
      states[Connection.CELL_4G] = 'Cell 4G connection'; 
      states[Connection.NONE]  = 'No network connection'; 

      alert('Connection type: ' + states[networkState]); 
     }, 500); 
    }catch(e){ 
     alert(e); 
     $.each(navigator, function(key, value){ 
      alert(key+' => '+value); 
     }); 
    } 
} 
+0

werden Sie den Aufbau vor Ort oder an build.phonegap.com? –

+0

build.phonegap.com –

+2

Sie möchten das Plugin hier finden: https://build.phonegap.com/plugins/626 '' –

Antwort

6

Sie möchten hier das Plugin verwenden: http://build.phonegap.com/plugins/626

<gap:plugin name="org.apache.cordova.network-information" version="0.2.7" /> 
+0

dies zu installieren ist erforderlich, um einen Befehl an der Konsole auszuführen? oder fügen Sie das nur der Datei config.xml hinzu –

+0

Dies ist spezifisch für den Online-Dienst 'PhoneGap Build'. Wenn Sie lokal erstellen, fügen Sie 'config.xml' nichts hinzu, führen Sie' cordova plugin 'aus und fügen Sie org.apache.cordova.network-information' und dann 'cordova build' in Ihrem lokalen Projektverzeichnis hinzu. –

2

Ich habe diese Idee hier schon geschrieben: https://stackoverflow.com/a/19319817/2390075

Was ich bemerkt habe ist, dass networkState nicht immer sofort initialisiert bekommt. Also, was für mich gearbeitet wird eine kleine Verzögerung hinzugefügt, nachdem der Staat zuerst überprüft und dann erneut überprüft, in Ihrem Fall sollte es so aussehen:

var networkState = navigator.connection && navigator.connection.type; 

setTimeout(function(){ 
    networkState = navigator.connection && navigator.connection.type; 

    var states = {}; 
    states[Connection.UNKNOWN] = 'Unknown connection'; 
    states[Connection.ETHERNET] = 'Ethernet connection'; 
    states[Connection.WIFI]  = 'WiFi connection'; 
    states[Connection.CELL_2G] = 'Cell 2G connection'; 
    states[Connection.CELL_3G] = 'Cell 3G connection'; 
    states[Connection.CELL_4G] = 'Cell 4G connection'; 
    states[Connection.NONE]  = 'No network connection'; 

    $("#system_popup").html('Connection type: ' + states[networkState]); 
    $("#system_popup").popup("open") 
    //alert('Connection type: ' + states[networkState]); 
}, 500); 
+2

Danke für den Vorschlag. Ich habe versucht, worüber du geredet hast und sogar mit deiner verknüpften Antwort in verschiedenen Variationen gearbeitet, aber leider bekomme ich immer noch die gleichen Ergebnisse. Wenn ich 'networkState = navigator.connection && navigator.connection.type;' verwende und 'networkState' alarmiere, wird es als 'undefiniert' gemeldet und wenn ich 'networkState = navigator.connection.type;' benutze, bekomme ich das selbe Ergebnis wie meine ursprünglicher Beitrag. –

1

Späte Antwort, aber das war für mich perfekt:

document.addEventListener("deviceready", onDeviceReady, false); 

// device APIs are available 
function onDeviceReady() { 
    if(navigator.network.connection.type == Connection.NONE){ 
     alert("nocon"); 
    }else{ 
     alert("yescon"); 
    } 
} 
+0

Ich vermisste nur ein "=" (d. H. Mit "=" anstelle von "=="). Dieser Beitrag hat es gelöscht. – Zeni

Verwandte Themen