不断检查互联网连接

时间:2016-09-15 15:36:53

标签: android angularjs ionic-framework

我正在使用离子框架开发Android应用,需要检查互联网连接,但要稳定。例如,如果用户已登录但没有连接,我想显示消息或任何消息。我曾想过像

这样的东西
<div class="bar bar-subheader" id="alerta_no_internet" ng-show="!online">
    <p>Not connected to Internet </p>
</div

他们不做的是任何服务,或者有什么东西要经常询问连接。

2 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题:

  1. 您可以在服务器上存储资产(可能是1px x 1px GIF图像)并不断对此进行轮询(每x秒连续请求一次)。当然,您想确保此图像未缓存。如果请求失败,您可以认为网络不可用。这很容易实现,但效率不高,因为轮询会通过网络发送大量HTTP标头。
  2. 这样效率更高 - 在客户端和服务器中实现WebSocket连接,并在打开应用程序时打开套接字。如果套接字丢失,您可以显示Connectivity Lost消息。这不需要重复发送HTTP请求。这样效率更高,但实现这一点需要更多的工作。
  3. 您可以在Ionic中为其中任何一个编写服务。

    最简单的是,选项#1可以是:

    setInterval(ajaxCall, 3000); //3000 MS == 3 sec
    
    function ajaxCall() {
      $.ajax('/testConnectivityUrl').then(function(response) {
        console.log("Still connected");
      }, function(err) {
        console.log("Lost connection");
      }
    }
    

    我使用过jQuery,但你可以使用vanilla JS或Angular或Ionic服务或工厂来做这件事。

答案 1 :(得分:1)

我对离子框架知之甚少,但Android框架中的ConnectivityManager确实会在连接变化时发出广播。您可以实现BroadcastReceiver来侦听这些更改: &lt; receiver android:name =&#34; .ConnectivityReceiver&#34;&gt;     &LT;意图滤光器&gt;         &lt; action android:name =&#34; android.net.conn.CONNECTIVITY_CHANGE&#34; /&gt;     &LT; /意图滤光器&gt; &LT; /接收机GT; 然后访问ConnectivityManager以监控网络状态: 公共类ConnectivityReceiver扩展BroadcastReceiver {     @覆盖     public void onReceive(Context context,Intent intent){         ConnectivityManager manager =                 (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);         NetworkInfo info = manager.getActiveNetworkInfo();         // TODO:使用NetworkInfo监控状态     } } 确保您在Manifest中声明了Internet和网络状态权限: &lt; uses-permission android:name =&#34; android.permission.INTERNET&#34; /&gt; &lt; uses-permission android:name =&#34; android.permission.ACCESS_NETWORK_STATE&#34; /&gt; 请注意,虽然连接变化可能很频繁,但是监控它们可能成本很高。根据最佳实践,您应该仅在需要时切换此接收器:   通常只需检查Internet连接即可   在开始更新之前,如果没有,则进一步暂停   更新,直到连接恢复。