测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可 | Apache 2 |
发布最新发布版 | 2016年11月 |
由 Holly Schinsky、Shazron Abdullah 维护。
标题:网络信息
Android | iOS | Windows 8.1 商店 | Windows 8.1 手机 | Windows 10 商店 | Travis CI |
---|---|---|---|---|---|
此插件实现了旧版本的 网络信息 API。它提供设备蜂窝和 Wi-Fi 连接以及设备是否连接到互联网的信息。
要获取一些关于如何使用此插件的想法,请查看此页面的底部示例或直接跳转到 参考 内容。
在 Apache Cordova 问题跟踪器上报告此插件的问题。
cordova plugin add cordova-plugin-network-information
connection
对象,通过navigator.connection
公开,提供了设备蜂窝和 Wi-Fi 连接的信息。
此特性提供了一种快速确定设备网络连接状态和连接类型的方法。
function checkConnection() {
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.CELL] = 'Cell generic connection';
states[Connection.NONE] = 'No network connection';
alert('Connection type: ' + states[networkState]);
}
checkConnection();
在 Cordova 2.3.0 之前,通过 navigator.network.connection
访问 Connection
对象,之后改为 navigator.connection
以符合 W3C 标准。它仍然保留在原始位置,但已弃用并将最终被移除。
navigator.connection.type
被设置为 Connection.CELL
。在仿真器中运行时,始终检测到 navigator.connection.type
为 Connection.UNKNOWN
。
Windows Phone 无法检测蜂窝网络连接类型。
navigator.connection.type
被设置为 Connection.CELL
。navigator.connection.type
为 Connection.ETHERNET
。navigator.connection.type
被设置为 Connection.CELL_2G
。navigator.connection.type
被设置为 Connection.CELL
。navigator.connection.type
总是被设置为 Connection.UNKNOWN
。当应用程序离线且设备未连接到互联网时,该事件将被触发。
document.addEventListener("offline", yourCallbackFunction, false);
当之前已连接的设备失去网络连接,使得应用程序无法访问互联网时,offline
事件将会触发。它依赖于连接 API 的相同信息,并在 connection.type
的值变为 NONE
时触发。
应用程序通常应该使用 document.addEventListener
来在 deviceready
事件触发后附加事件监听器。
document.addEventListener("offline", onOffline, false);
function onOffline() {
// Handle the offline event
}
在启动过程中,第一次离线事件(如果适用)至少要一秒钟才会触发。
在仿真器中运行时,connection.status
总是被设置为未知,因此该事件不触发。
仿真器报告连接类型为 Cellular
,该类型不会更改,因此该事件不会触发。
当应用程序上线,设备连接到互联网时,此事件触发。
document.addEventListener("online", yourCallbackFunction, false);
当之前未连接的设备接收到网络连接并允许应用程序访问互联网时,会触发 online
事件。它与连接 API 相依赖的信息相同,当 connection.type
从 NONE
变更为其他任何值时,该事件被触发。
应用程序通常应该使用 document.addEventListener
来在 deviceready
事件触发后附加事件监听器。
document.addEventListener("online", onOnline, false);
function onOnline() {
// Handle the online event
}
在初始启动过程中,在至少一件秒的延迟之后才会触发第一个(如果适用的话) online
事件,在此期间 connection.type
处于 UNKNOWN
状态。
在仿真器中运行时,connection.status
总是被设置为未知,因此该事件不触发。
仿真器报告连接类型为 Cellular
,该类型不变,因此事件不会触发。
本节中的代码示例展示了使用在线和离线事件以及您的网络连接状态更改应用程序行为的例子。
首先,创建一个新的文件对象(data.txt)用于示例数据。从 deviceready
处理程序调用此函数。
注意 此代码示例需要文件插件。
var dataFileEntry;
function createSomeData() {
window.requestFileSystem(window.TEMPORARY, 5 * 1024 * 1024, function (fs) {
console.log('file system open: ' + fs.name);
// Creates a new file or returns an existing file.
fs.root.getFile("data.txt", { create: true, exclusive: false }, function (fileEntry) {
dataFileEntry = fileEntry;
}, onErrorCreateFile);
}, onErrorLoadFs);
}
接下来,在 deviceready
处理程序中添加对在线和离线事件的监听。
document.addEventListener("offline", onOffline, false);
document.addEventListener("online", onOnline, false);
应用程序的 onOnline
函数处理在线事件。在事件处理程序中,检查当前网络状态。在此应用程序中,将任何连接类型视为有效,除了 Connection.NONE。如果您有连接,您会尝试上传文件。
function onOnline() {
// Handle the online event
var networkState = navigator.connection.type;
if (networkState !== Connection.NONE) {
if (dataFileEntry) {
tryToUploadFile();
}
}
display('Connection type: ' + networkState);
}
在前面的代码中,在线事件触发时,调用应用程序的 tryToUploadFile
函数。
如果文件传输对象的上传函数失败,调用应用程序的 offlineWrite
函数,以某种方式保存当前数据。
注意 此示例需要文件传输插件。
function tryToUploadFile() {
// !! Assumes variable fileURL contains a valid URL to a text file on the device,
var fileURL = getDataFileEntry().toURL();
var success = function (r) {
console.log("Response = " + r.response);
display("Uploaded. Response: " + r.response);
}
var fail = function (error) {
console.log("An error has occurred: Code = " + error.code);
offlineWrite("Failed to upload: some offline data");
}
var options = new FileUploadOptions();
options.fileKey = "file";
options.fileName = fileURL.substr(fileURL.lastIndexOf('/') + 1);
options.mimeType = "text/plain";
var ft = new FileTransfer();
// Make sure you add the domain of your server URL to the
// Content-Security-Policy <meta> element in index.html.
ft.upload(fileURL, encodeURI(SERVER), success, fail, options);
};
下面是 offlineWrite
函数的代码。
注意 此代码示例需要文件插件。
function offlineWrite(offlineData) {
// Create a FileWriter object for our FileEntry.
dataFileEntry.createWriter(function (fileWriter) {
fileWriter.onwriteend = function () {
console.log("Successful file write...");
display(offlineData);
};
fileWriter.onerror = function (e) {
console.log("Failed file write: " + e.toString());
};
fileWriter.write(offlineData);
});
}
当发生离线事件时,只是执行类似通知用户(在示例中只是记录下来)的操作。
function onOffline() {
// Handle the offline event
console.log("lost connection");
}