2012-03-23 103 views
1

是否有任何廣播接收器(或服務)在應用程序運行期間持續檢查互聯網連接。所以每當有鬆動的連接時,我都會收到一些鬆散連接的消息。 我知道ConnectivityManager即時檢查互聯網連接

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

是,我們可以檢查這個類有連接到Internet或不?但我需要檢查瞬間......

+2

打開www.google.com,你可以得到即時的互聯網連接... :) – Murtaza 2012-03-23 09:27:06

+0

ConnectivityManager可能是你最好的選擇,我已經嘗試過尋找,但沒有找到任何東西。檢查出這個問題,它有一些答案,檢查連接性的小改進http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-timeouts – Habib 2012-03-23 09:37:11

+0

@ user1129443 - 嘿放鬆朋友只是想讓你從你的壓力轉移..希望你很快找到你的解決方案... – Murtaza 2012-03-23 10:41:33

回答

1

這種嘗試代碼工作

public static boolean checkConnection(Context mContext) { 

     NetworkInfo info = ((ConnectivityManager) mContext 
       .getSystemService(Context.CONNECTIVITY_SERVICE)) 
       .getActiveNetworkInfo(); 
     if (info == null || !info.isConnected()) { 
      return false; 
     } 
     if (info.isRoaming()) { 
      return true; 
     } 
     return true; 
    } 
+1

親愛的,檢查他的代碼.....有什麼新的代碼? – 2012-03-23 09:35:29

+0

@PareshMayani正是..。 ..。 +1 – 2012-03-23 09:36:15

+0

@ user1129443檢查[this](http://www.technotalkative.com/android-check-internet-connection/)教程中的'update'部分。 – 2012-03-23 09:43:46

0

您可以用具體的行動增加廣播:

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(connectionReceiver, filter);

+0

有沒有在清單文件中定義的東西? – 2012-03-23 09:35:11

+0

喲可以在清單中定義接收器,如果你想或者你想在你想要的活動中定義廣播。 喜歡的東西: '私人廣播接收器connectionReceiver =新的廣播接收器(){ \t \t @覆蓋 \t \t公共無效的onReceive(上下文語境,意圖意圖){ \t \t \t字符串原因= intent.getStringExtra(ConnectivityManager.EXTRA_REASON ); // DO Something \t \t} \t};' – youchy 2012-03-23 10:24:36

+0

這個廣播通知當連接CHANGE!它每隔N秒都不會收到一個意圖。也許你可以在應用程序的開始時保存連接(開/關),然後用接收器更新ir。你只會閱讀你保存的狀態。 – youchy 2012-03-23 10:30:05

0

使用許可權的許可,只是使一種連接方法

public boolean isOnline() { 
    ConnectivityManager cm = 
     (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

    return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 
} 
0

直到你是德開發顯示網絡狀態的應用程序,然後嘗試使用ConnectivityManager和其他廣播。

如果是這種情況(通常很常見),您需要執行一些基於網絡的操作,如從任何服務器獲取一些數據。

我不去檢查網絡狀態 但依賴於UnknownHostException或RuntimeException或等等,當你發出一個請求告訴我「你的網絡不可用」時會拋出異常。

這與我在進行api請求之前進行網絡檢查相比,我覺得是更好的方法。

  1. 不需要額外的連接管理器代碼。

  2. 加上如果情況開發人員保存連接的值不可用,並且不更新它並在一段時間後使用連接。所以它很容易出錯

  3. 它會像在需要的時候它並不會影響其他業務的確切時間檢查。

  4. 主要一個情況是非常積極的情況下,器件絕不會失去數據 連接。爲什麼要運行一段沒用的代碼。

這只是我的偏好,我不質疑ConnectivityManager的存在:)。

希望它有助於以某種方式在這個或其他場景。

+0

,這將是互聯網連接的最即時檢查 – Javanator 2012-03-23 10:58:35