2012-04-17 79 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; 
相關問題