2012-03-23 147 views
1

是否有任何广播接收器(或服务)在应用程序运行期间持续检查互联网连接。所以每当有松动的连接时,我都会收到一些松散连接的消息。 我知道ConnectivityManager即时检查互联网连接

private boolean isNetworkAvailable() { 
     ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager 
       .getActiveNetworkInfo(); 
     return activeNetworkInfo != null; 
    } 

是,我们可以检查这个类有连接到Internet或不?但我需要检查瞬间......

+2

打开www.google.com,你可以得到即时的互联网连接... :) – Murtaza 2012-03-23 09:27:06

+0

ConnectivityManager可能是你最好的选择,我已经尝试过寻找,但没有找到任何东西。检查出这个问题,它有一些答案,检查连接性的小改进http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-timeouts – Habib 2012-03-23 09:37:11

+0

@ user1129443 - 嘿放松朋友只是想让你从你的压力转移..希望你很快找到你的解决方案... – Murtaza 2012-03-23 10:41:33

回答

1

这种尝试代码工作

public static boolean checkConnection(Context mContext) { 

     NetworkInfo info = ((ConnectivityManager) mContext 
       .getSystemService(Context.CONNECTIVITY_SERVICE)) 
       .getActiveNetworkInfo(); 
     if (info == null || !info.isConnected()) { 
      return false; 
     } 
     if (info.isRoaming()) { 
      return true; 
     } 
     return true; 
    } 
+1

亲爱的,检查他的代码.....有什么新的代码? – 2012-03-23 09:35:29

+0

@PareshMayani正是..。 ..。 +1 – 2012-03-23 09:36:15

+0

@ user1129443检查[this](http://www.technotalkative.com/android-check-internet-connection/)教程中的'update'部分。 – 2012-03-23 09:43:46

0

您可以用具体的行动增加广播:

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(connectionReceiver, filter);

+0

有没有在清单文件中定义的东西? – 2012-03-23 09:35:11

+0

哟可以在清单中定义接收器,如果你想或者你想在你想要的活动中定义广播。 喜欢的东西: '私人广播接收器connectionReceiver =新的广播接收器(){ \t \t @覆盖 \t \t公共无效的onReceive(上下文语境,意图意图){ \t \t \t字符串原因= intent.getStringExtra(ConnectivityManager.EXTRA_REASON ); // DO Something \t \t} \t};' – youchy 2012-03-23 10:24:36

+0

这个广播通知当连接CHANGE!它每隔N秒都不会收到一个意图。也许你可以在应用程序的开始时保存连接(开/关),然后用接收器更新ir。你只会阅读你保存的状态。 – youchy 2012-03-23 10:30:05

0

使用许可权的许可,只是使一种连接方法

public boolean isOnline() { 
    ConnectivityManager cm = 
     (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

    return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 
} 
0

直到你是德开发显示网络状态的应用程序,然后尝试使用ConnectivityManager和其他广播。

如果是这种情况(通常很常见),您需要执行一些基于网络的操作,如从任何服务器获取一些数据。

我不去检查网络状态 但依赖于UnknownHostException或RuntimeException或等等,当你发出一个请求告诉我“你的网络不可用”时会抛出异常。

这与我在进行api请求之前进行网络检查相比,我觉得是更好的方法。

  1. 不需要额外的连接管理器代码。

  2. 加上如果情况开发人员保存连接的值不可用,并且不更新它并在一段时间后使用连接。所以它很容易出错

  3. 它会像在需要的时候它并不会影响其他业务的确切时间检查。

  4. 主要一个情况是非常积极的情况下,器件绝不会失去数据 连接。为什么要运行一段没用的代码。

这只是我的偏好,我不质疑ConnectivityManager的存在:)。

希望它有助于以某种方式在这个或其他场景。

+0

,这将是互联网连接的最即时检查 – Javanator 2012-03-23 10:58:35