cordova-plugin-network-information 1.3.0

cordova-plugin-network-information 1.3.0

测试已测试
语言语言 Obj-CObjective C
许可 Apache 2
发布最新发布版2016年11月

Holly SchinskyShazron Abdullah 维护。



  • Adobe PhoneGap 团队提供

标题:网络信息

描述:获取无线连接的信息。

Android iOS Windows 8.1 商店 Windows 8.1 手机 Windows 10 商店 Travis CI
Build Status Build Status Build Status Build Status Build Status

cordova-plugin-network-information

此插件实现了旧版本的 网络信息 API。它提供设备蜂窝和 Wi-Fi 连接以及设备是否连接到互联网的信息。

要获取一些关于如何使用此插件的想法,请查看此页面的底部示例或直接跳转到 参考 内容。

Apache Cordova 问题跟踪器上报告此插件的问题。

参考

安装

cordova plugin add cordova-plugin-network-information

支持的平台

  • Amazon Fire OS
  • Android
  • BlackBerry 10
  • 浏览器
  • iOS
  • Windows Phone 7 和 8
  • Tizen
  • Windows
  • Firefox OS

连接

connection 对象,通过 navigator.connection 公开,提供了设备蜂窝和 Wi-Fi 连接的信息。

属性

  • connection.type

常量

  • Connection.UNKNOWN
  • Connection.ETHERNET
  • Connection.WIFI
  • Connection.CELL_2G
  • Connection.CELL_3G
  • Connection.CELL_4G
  • Connection.CELL
  • Connection.NONE

connection.type

此特性提供了一种快速确定设备网络连接状态和连接类型的方法。

快速示例

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

API 更改

在 Cordova 2.3.0 之前,通过 navigator.network.connection 访问 Connection 对象,之后改为 navigator.connection 以符合 W3C 标准。它仍然保留在原始位置,但已弃用并将最终被移除。

iOS 特有问题

    • 对于所有蜂窝数据,navigator.connection.type 被设置为 Connection.CELL

Windows Phone 特有问题

  • 在仿真器中运行时,始终检测到 navigator.connection.typeConnection.UNKNOWN

  • Windows Phone 无法检测蜂窝网络连接类型。

    • 对于所有蜂窝数据,navigator.connection.type 被设置为 Connection.CELL

Windows 特有问题

  • 在 Phone 8.1 仿真器中运行时,始终检测到 navigator.connection.typeConnection.ETHERNET

Tizen 特有问题

  • Tizen 只能检测到 Wi-Fi 或蜂窝网络连接。
    • 对于所有蜂窝数据,navigator.connection.type 被设置为 Connection.CELL_2G

Firefox OS 特有问题

  • Firefox OS 无法检测蜂窝网络连接类型。
    • 对于所有蜂窝数据,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
}

iOS 特有问题

在启动过程中,第一次离线事件(如果适用)至少要一秒钟才会触发。

Windows Phone 7 特有问题

在仿真器中运行时,connection.status 总是被设置为未知,因此该事件不触发。

Windows Phone 8 特有问题

仿真器报告连接类型为 Cellular,该类型不会更改,因此该事件不会触发。

在线

当应用程序上线,设备连接到互联网时,此事件触发。

document.addEventListener("online", yourCallbackFunction, false);

详细信息

当之前未连接的设备接收到网络连接并允许应用程序访问互联网时,会触发 online 事件。它与连接 API 相依赖的信息相同,当 connection.typeNONE 变更为其他任何值时,该事件被触发。

应用程序通常应该使用 document.addEventListener 来在 deviceready 事件触发后附加事件监听器。

快速示例

document.addEventListener("online", onOnline, false);

function onOnline() {
    // Handle the online event
}

iOS 问题

在初始启动过程中,在至少一件秒的延迟之后才会触发第一个(如果适用的话) online 事件,在此期间 connection.type 处于 UNKNOWN 状态。

Windows Phone 7 问题

在仿真器中运行时,connection.status 总是被设置为未知,因此该事件不触发。

Windows Phone 8 问题

仿真器报告连接类型为 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");
}