所以這是一個相當的啓示 - 事實上,Android SDK似乎沒有可靠的方式來檢查互聯網接入。Android互聯網支票(非網絡支票)
請允許我澄清。
Android文檔&大多數在線樣品用在這裏發現了類似的一個辦法:https://stackoverflow.com/a/4009133/980917
類似的東西來:
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}
但是 - 這只是檢查,如果您連接到網絡並且不保證你可以到達互聯網。
對於那些沒有意識到這一點,通過從路由器上拔下「IN」以太網電纜或連接到任何未連接到互聯網的Wifi,它很容易重現。
KNOWN的變通辦法:
1)試圖達成一個網站:https://stackoverflow.com/a/5803489/980917 這是問題,因爲需要線程管理。
2)嘗試ping Google的DNS:https://stackoverflow.com/a/27312494/980917 不需要用線程封裝,但會凍結UI。
我正在尋找:
理想情況下,我想有一個互聯網檢查,這是一個實用工具類,一個簡單的靜態方法,可以從UI或業務邏輯代碼調用。由於上述解決方案不能很好地工作,因爲在調用者類中需要額外的開銷來處理線程管理。
有沒有什麼辦法可以在Android上獲得可靠的互聯網檢查而不會用線程管理代碼污染調用者類?
謝謝。
感謝您 - 將嘗試它。很好的實現已知的方法。我開始接受,我將不得不做一些重構,以確保所有的互聯網檢查不會在UI線程上運行。 – AlexVPerl 2015-04-02 19:40:52
嗨,再次 - 我正在整合連接助手類,你有一個快速使用的例子,你可以提供?謝謝! – AlexVPerl 2015-04-04 23:17:22
謝謝我結束了使用checkHostByConnection() - 這工作最好的解決方案。 – AlexVPerl 2015-04-05 15:33:19