2012-04-17 78 views
7

我的应用程序首先从互联网加载数据(我正在使用webservice) 我想在应用程序启动时检查互联网访问。如何检查互联网是否可用或在Android应用程序启动?

  1. 我想检查是否有任何形式的互联网3G或WIFI或GPRS或任何其他可用或不可用。
  2. 如果没有可用的,给邮件用户喜欢“你需要上网”并退出应用程序。 (目前我在我的应用程序中收到强制关闭错误,如果没有互联网访问)
  3. 如果可以,请正常启动我的应用程序。
  4. 另外,我的应用程序是从获取Web服务的DATAS在不同的阶段,每个阶段或操作前,我会想首先要检查网络连接。

我如何做到这一点?

+2

见例如http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-timeouts以前的答案。 – mlc 2012-04-17 15:31:48

回答

7

你可以用我的方法:

public static boolean isNetworkAvailable(Context context) 
{ 
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

    if (connectivity != null) 
    { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 

     if (info != null) 
     { 
      for (int i = 0; i < info.length; i++) 
      { 
       Log.i("Class", info[i].getState().toString()); 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) 
       { 
        return true; 
       } 
      } 
     } 
    } 
    return false; 
} 
+0

Thanx! 作品! – captaindroid 2012-04-20 05:04:48

+0

我很高兴它可以帮助你.. :) – dreamcoder 2012-04-20 09:02:17

+0

如果我有wifi连接没有工作的互联网连接,然后代码返回true。你有任何替代这个? – 2014-02-15 21:19:51

3

可以使用ConnectivityManager做到这一切。所有需要的信息可以在这里找到

http://developer.android.com/reference/android/net/ConnectivityManager.html

你可能要坚持这样的事情在你的初始活性的onStart()方法(取决于您的代码的连接被激发起来,数据下载)

ConnectivityManager cm = (ConnectivityManager) Context.getSystemService(Context.CONNECTIVITY_SERVICE); 

if (cm.getAllNetworkInfo().isConnected()) { 
//proceed with loading 
} else { 
//showErrorDialog 
} 

我没有测试过TE代码,以便剪切和粘贴可能是一个坏主意,但是这应该给你一个很好的起点。如果您查看文档,还有很多其他信息。

而且它可能是一个想法,通过改变你的代码来处理缺少连接,因此它不只是崩溃,如果没有连接,预HAPS显示默认加载屏幕?即使有可用的连接,您的应用也可能无法获取数据,因此您也需要处理该情况。

1
NetworkInfo i = conMgr.getActiveNetworkInfo(); 
    if (i == null) 
    return false; 
    if (!i.isConnected()) 
    return false; 
    if (!i.isAvailable()) 
    return false; 
    return true; 
相关问题