2013-08-07 178 views
0

我正在檢查設備的網絡狀態。使用: -檢查網站是否可用

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

我想借此對遠一點和檢查,看看是否該設備可以訪問互聯網或http://www.google.com給定的站點,例如,如果可以則返回爲真,如果它能夠」然後返回爲假。

我的代碼的問題是,如果設備連接到路由器並且路由器處於脫機狀態,它將返回true。我需要一個實際的互聯網連接檢查。

修訂後的代碼

public void GoToStation(View v) 
{ 

    try { 
     InetAddress ina = InetAddress.getByName("http://188.65.176.98/"); 

     if(ina.isReachable(3000)) { 

        Intent myIntent = new Intent(MainActivity.this, CustomizedListViewStation.class); 
        startActivityForResult(myIntent, 0); 

     } else { 
      Toast.makeText(this, "You need a data connection to view Safety Zones", Toast.LENGTH_LONG).show(); 
     } 
    } catch (IOException ioe) { 
     ioe.printStackTrace(); 

    } 
+0

在哪個系統,你正在檢查這一點。 –

+0

我建議你閱讀這篇文章。可能是你要找的: http://stackoverflow.com/questions/3905358/how-to-ping-external-ip-from-java-android – Aleks

+0

我很抱歉這是一個Android應用程序。 –

回答

1

要檢查是否有實際的互聯網連接,你可以嘗試訪問一些遠程服務器。例如:

try { 
    InetAddress ina = InetAddress.getByName([server]); 

    if(ina.isReachable(3000)) { 
     System.out.println("Internet Connection"); 
    } else { 
     System.out.println("No internet connection"); 
    } 
} catch (IOException ioe) { 
    ioe.printStackTrace(); 

} 

其中[server]是要嘗試連接的服務器。你應該使用你自己的服務器,因爲使用別人的帶寬來達到這個目的是粗魯的(再加上使用你自己的服務器更可靠)。

另一種方法是檢查是否有Android API會這樣做,因爲Android會檢查與Google服務器的連接。我不確定這個狀態是否暴露在API中。

+0

shanet謝謝你的回覆。我怎樣才能將你的例子添加到我已經擁有的代碼中,以便它對於連接返回true,對於沒有返回的連接返回false activeNetworkInfo!= null && activeNetworkInfo.isConnected(); –

+0

@RobbieBirkett將它放在函數中,並用'return true/false'替換println行。我還應該補充說明,這顯然是做網絡IO,因此它應該放在非UI線程上,否則Android會抱怨。 – shanet

+0

我會把[服務器]放在哪裏?一個URL,比如我的主頁? –

2

你可以做這樣的事情:

boolean isAvailable(URL url){ 
    try { 
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.connect(); 
     urlConnection.disconnect(); 
     return true; 
    } catch (IOException e) { 
      Log.e(TAG, "Exception", e); 
    } 
    return false; 
} 
+0

打開一個完整的HTTP連接似乎有點沉重,只是爲了檢查用戶是否具有活動的Internet連接。 – shanet