7

現在のネットワーク接続を確認するための標準の PhoneGap API (以下を参照) は、Ripple Emulator での結果を更新していないようです。接続タイプを変更して 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 接続を区別する必要があります。

4

2 に答える 2

8

どうやら navigator.connection.type が Windows プラットフォームの cordova で更新されていないようです。コードを見ると、navigator.connection.type は「deviceready」イベントの後に一度だけ設定されています。

トリックは、関連するイベントで Connection#getInfo() を使用して手動で更新することです

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);
});

免責事項:自分のコードからリファクタリング/コピーペーストされた部分は、そのままで動作するはずです。

于 2015-01-06T08:32:40.633 に答える
-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);

これにより、navigator.connection.type に値を更新するための時間 (この例では 500 ミリ秒) が与えられます。

于 2013-10-24T16:28:34.913 に答える