2013-03-25 72 views
1

我需要檢查Android應用上的Internet連接。在Android上檢查Internet連接

我正在使用此代碼:

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo ni = cm.getActiveNetworkInfo(); 
     if (ni!=null && ni.isAvailable() && ni.isConnected()) { 
      return true; 
     } else { 
      return false; 
     } 

而且無法通過下一個錯誤:

The method getSystemService(String) is undefined for the type ConxsMTD

我嘗試使用getContext().getSystemService也失敗,下一個錯誤:

The method getContext() is undefined for the type ConxsMTD

任何想法我做錯了什麼?

+2

在這兩種情況下,你使用的是不可用的方法在你使用它們的課堂上。這是基本的Java知識... – WarrenFaith 2013-03-25 18:52:04

回答

1

這不能解決你給出的例子,但我的例子確實有效,並且更簡單(在我的腦海中)。

你想要做的是發送一個「ping」(如果你想調用它)來檢查連接。如果連接完成,您知道您仍然連接。如果您獲得IOExceptionNullPointerException,那麼您可能超時並且不再連接。

try { 
    URL url = new URL("http://www.google.com"); 
    HttpURLConnection urlConnect = (HttpURLConnection) url.openConnection(); 
    urlConnect.setConnectTimeout(1000); 
    urlConnect.getContent(); 
    System.out.println("Connection established."); 
} catch (NullPointerException np) { 
    np.printStackTrace(); 
} catch (IOException io) { 
    io.printStackTrace(); 
} 
0

使用這個片段,我用它在每一個項目:

public static boolean checkNetworkState(Context context) { 
    ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo infos[] = conMgr.getAllNetworkInfo(); 
    for (NetworkInfo info : infos) { 
     if (info.getState() == State.CONNECTED) 
      return true; 
    } 
    return false; 
} 

所以,你只需通過getApplicationContext()這種方法就像boolean hasConnection = checkNetworkState(getApplicationContext());