2013-04-11 75 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