2012-01-23 144 views
0

出於某種原因,PhoneGap的連接API返回nullnavigator.network.connection.type返回null而不是Connection.NONE

function checkConnection() { 
    var networkState = navigator.network.connection.type; 
    alert(networkState); 
    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'; 

    document.getElementById('connections').innerHTML = states[networkState]; 
} 

我跑從onDeviceReady功能的設備運行時被調用此功能。

當一切都關閉時,我得到null。我不應該得到Connection.NONE而不是null?這真的很煩人,因爲我無法檢查手機是否連接。它在Wifi打開時工作正常。

+1

嘿,我讀過它不應該再回到零的代碼。這個bug的複製場景是什麼?我已將手機置於飛行模式並正確返回「無」。在調用checkConnection()之前,您是否確保等待「deviceready」事件? –

回答

1

我目前使用PhoneGap 1.4.1和Sencha Touch 1.1.1。在Android 2.3.5上(經過HTC Desire S測試)。 看起來,即使在'deviceready'事件被觸發(在檢查源代碼後確認)之後,即使調用了「Phone navigator.network.connection.type」語句,也會使用Phonegap 1.4.1有效返回'null'。然而,它完美適用於Cordova(ex-PhoneGap)1.5.0。所以我建議儘快升級:-)

Eric。

2

確保您已經添加

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

在AndroidManifest.xml

1

對於之前的1.6科爾多瓦的版本,你需要使用:

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

相反的:

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

請將插件名稱更改爲「網絡狀態」,空格!

+0

呃,[這](http://stackoverflow.com/a/10176489/1110760)從四月十六日開始回答說不一樣。 – Jelmer

+0

反過來 link http://docs.phonegap.com/en/2.3.0/cordova_connection_connection.md.html #Connection – Grumpy

1

從2.3.0之前到2.3.0之間還有一個變化。

在Cordova 2.3.0之前,Connection對象存在於: navigator.network.connection。

爲了符合規範,將其更改爲2.3.0中的navigator.connection。

navigator.network.connection依然存在,但現在已被棄用,並且 將在未來版本中刪除。

2.7.0 docs

所以改變這種

var networkState = navigator.network.connection.type; 

爲了這

var networkState = navigator.connection.type; 

基本上從JavaScript中移除網絡。希望這可以幫助。

+0

感謝您的更新。可能對使用最新版Cordova的人有用! – Jelmer

0

使用此代碼:

var networkState = navigator.connection.type; 

相反的:

var networkState = navigator.network.connection.type;