2015-05-03 60 views
0

所以我在比較下面應該實現的兩個功能中的哪一個。我知道有人會檢查手機是否連接到互聯網,並檢查一般情況下是否有連接。一個人比另一個人更好嗎?一個人與另一個人做什麼?他們做同樣的事情嗎?在Android中檢查互聯網連接(功能比較)

功能1:

public static boolean hasActiveInternetConnection(Context context) { 
    if (isNetworkAvailable(context)) { 
     try { 
      HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection()); 
      urlc.setRequestProperty("User-Agent", "Test"); 
      urlc.setRequestProperty("Connection", "close"); 
      urlc.setConnectTimeout(1500); 
      urlc.connect(); 
      return (urlc.getResponseCode() == 200); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "Error checking internet connection", e); 
     } 
    } else { 
     Log.d(LOG_TAG, "No network available!"); 
    } 
    return false; 
} 

功能2:

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

回答

2

首先,功能需要許可

<uses-permission android:name="android.permission.INTERNET"/> 

功能2.需求

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

功能1.

  • 傳輸實際數據(壞)
  • 如果谷歌已關閉(機率很小,但不爲0%)
  • 在緩慢的移動網絡不一樣,如果DNS服務器都死了
  • 不行的工作,可需要相當長的一段時間才能得到回覆(非常糟糕)

實際中,您只能使用功能2。並妥善處理失敗的請求至YOUR服務器

+1

所有的答案都很好,選擇這一個,因爲它提到了最佳實踐....謝謝大家。 –

+0

謝謝。請享用。 –

1

功能2具有更清晰的聲明的方式,你問的網絡可用性,而不是做的步驟進行查看(如功能1) 。 此外,Android 5.0提供了全新的多網絡API,讓你的應用程序動態掃描具有特定的功能可用的網絡,並建立它們的連接,見Wireless and Connectivity

+0

我試過+1!這很酷。你有沒有實現它,如果是的話,是不是很難? –

+0

我還沒有使用這個API,但它不難實現:) – Max77

1

我通常是在你的情況下同時使用......像( isNetworkavailable & & hasActiveInternetConnection)

第一種方法會檢查是否有在連接所有(如也沒有人,如果手機處於飛行模式),如果這似乎工作第二種方法檢查是否有可能實際上是通過該連接收到的數據

1

在我看來使用函數2。如果它成功呼叫功能1 ;-)
功能2將確保設備上有一些連接。如果是,那麼function2將在本例中ping一些uri,google。它在設備可能連接到某些wifi的情況下很有用,但在連接等方面仍然存在問題。

有時候可能會遇到的唯一問題是在連接速度非常慢的情況下。即使連接可用時,它可能會說,沒有連接可用