2013-04-11 73 views
7

標準的PhoneGap API檢查當前的網絡連接(見下文)似乎沒有更新它的結果紋波模擬器更新。當我改變連接類型並執行checkConnection(),它返回第一個呼叫的連接類型此功能(在deviceready)網絡連接狀態不紋波

function checkConnection() { // Checks current network status 
    networkState = navigator.connection.type; 
    console.log(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'; 

    // DEBUG: notify on network state 
    console.log("Connection type: " + states[networkState]); 
} 

還有什麼我需要做的(添加事件偵聽器?)到讓這個工作? 正常情況下,設備將只火的時候,從在線狀態切換到離線的事件,但我需要「自由」互聯網和XG連接進行區分。

+1

這真的是這麼差的問題?還是沒有人遇到過這個問題? – 2013-05-06 06:38:48

回答

-1

我要說嘗試添加超時功能延遲呼叫。當解決問題時,我已經看到類似的問題。 先做:

networkState = navigator.connection.type; 

則:

setTimeout(function(){ 

    networkState = navigator.connection.type; // have to do this second time to pick up the refreshed value 
    console.log(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'; 

    // DEBUG: notify on network state 
    console.log("Connection type: " + states[networkState]); 
}, 500); 

這給時間(500毫秒在這個例子中),以navigator.connection.type刷新它的價值。

+1

或者你可以使用onDeviceReady()http://stackoverflow.com/a/17754340/1427338 – bleuscyther 2014-07-08 06:00:57

+0

@bleuscyther如果都能正常工作,這是一個很大更好的解決方案。我很確定我的網絡狀態初始化在onDeviceReady()之後運行,但它有時仍然失敗。我需要再次檢查;)爲更新而歡呼 – benka 2014-07-08 07:55:09

+0

嘗試過但不起作用 – wmfairuz 2014-10-14 10:09:48

6

顯然navigator.connection.type是不是在Windows平臺上更新科爾多瓦。 查看代碼,navigator.connection.type只在'deviceready'事件之後設置一次。

訣竅是使用在相關事件

var connection = navigator.connection; 
function errorCallback(e) { 
    console.warn(e); 
}; 
function updateConnection(info) { 
    connection.type = info; 
} 
document.addEventListener("resume", function() { 
    connection.getInfo(updateConnection, errorCallback); 
}); 
document.addEventListener("online", function() { 
    connection.getInfo(updateConnection, errorCallback); 
}); 
document.addEventListener("offline", function() { 
    connection.getInfo(updateConnection, errorCallback); 
}); 

免責聲明連接#的getInfo()來手動更新:從我自己的代碼重構/複製粘貼片,應該工作開箱。

+0

這完全起作用,但是你發現它怎麼樣?除了你的回答,我找不到任何關於此事的信息,而且現在我知道要尋找什麼,科多瓦的來源。 – 2016-05-26 21:30:38