【问题标题】:Event listener when connecting to a wifi network连接到 wifi 网络时的事件监听器
【发布时间】:2018-03-27 14:32:58
【问题描述】:

我正在使用cordova for android 构建一个应用程序。我想知道是否有任何方法可以添加事件侦听器以在用户连接到 wifi 网络时通知我。例如,当他/她正在使用手机数据并连接到 wifi 网络时,我希望在用户再次从 wifi 更改为数据时收到通知。

我能想到的唯一方法是每 X 毫秒创建一个setInterval,并使用plugin cordova-plugin-network-information 检查网络信息。但是这样做似乎效率很低,我想立即得到通知。

那么当网络发生变化时,有什么方法/插件可以添加事件监听器吗?

编辑:我没有使用离子,只使用主干和 jquery。

谢谢!

【问题讨论】:

    标签: javascript android cordova phonegap


    【解决方案1】:

    如果您使用的是 Ionic,那么您可以这样做:

    // watch network for a connection
    let connectSubscription = this.network.onConnect().subscribe(() => {
      console.log('network connected!');
      // We just got a connection but we need to wait briefly
       // before we determine the connection type. Might need to wait.
      // prior to doing any api requests as well.
      setTimeout(() => {
        if (this.network.type === 'wifi') {
          console.log('we got a wifi connection, woohoo!');
        }
      }, 3000);
    });
    
    // stop connect watch
    connectSubscription.unsubscribe();
    

    (来自Ionic Native Documentation的代码)

    Cordova 有一个名为 cordova-plugin-network-information 的插件,您可以从 Github 下载该插件

    这样你就可以写出这样的东西了:

    document.addEventListener("online", onOnline, false);
    
    function onOnline() {
       if(checkConnection===Connection.WIFI){
          // Code
       }
    }
    
    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';
    
        console.log("Connection: "+states[networkState])
    
        return networkState
    }
    

    我还没有测试过 Cordova 示例

    【讨论】:

    • 对不起,我只是使用骨干,没有离子。如果用户已经连接,但只是从数据切换到 wifi,这会起作用吗?
    • @Pablo 第二个例子是 Cordova。我真的不知道 - 你必须尝试。但如果不是,您可以使用 setTimeout() 创建一个解决方法
    • 不完全是我想要的,但似乎唯一的方法是间隔。
    • 小更新。更改网络时会触发事件侦听器。所以你的答案很完美!
    • @Pablo 很高兴我能帮上忙。
    【解决方案2】:

    据我所知,只有当应用程序转到 online/offline 时您才会收到通知,并且通过 Internet 的快速提醒证实了我的疑问。我想知道连接类型的方法是每秒检查网络是否使用setTimeoutsetInterval 发生变化。

    【讨论】:

    • 如果我最终使用了 setInterval 或 setTimeout,那么在提高应用性能方面有什么缺点吗?这样做是不好的做法吗?
    • 如果你每秒钟都这样做,那就不是真的了。例如,如果您每 50 毫秒执行一次,可能会影响性能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多