2012-09-24 102 views
5

可能重複:
How can I monitor the network connection status in Android?有效的方法來連續檢查是否可用的Internet連接Android中

我需要不斷地上網查是否連接與否和更新文本區域因此帶有適當的信息。現在,如果我創建一個asynctask它將執行一次並停止這不是我想要的。我想連續檢查,顯然這不應該在主線上。所以服務不會是一個不錯的選擇。任何人都可以幫助我解決這個問題的最佳方法是什麼?謝謝

+2

爲什麼你需要這樣做嗎? –

回答

7

用接收器做。您可以收到有關網絡狀態更改的通知。例如,

private BroadcastReceiver networkReceiver = new BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 
    if(intent.getExtras()!=null) { 
     NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO); 
     if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) { 
      // we're connected 
     } 
    } 
    // we're not connected 
    } 
} 

寄存器這在你的onResume(),並註銷在onPause()

@Override 
protected void onPause() { 
    super.onPause(); 
    unregisterReceiver(networkReceiver); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); 
    registerReceiver(networkReceiver, filter); 
} 

另外,獲得初始狀態接收機已經註冊之前,在你的onResume()方法調用此,

public boolean isNetworkConnected() { 
     ConnectivityManager cm = 
      (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
      return true; 
     } 
     return false; 
    } 

確保您的應用程序請求該權限,

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

當我開啓和關閉我的無線廣播接收器不工作。 Onresume代碼工作正常,但廣播接收器不通知我任何改變。任何幫助? – Vyper

+0

我只是想出了錯誤,謝謝! – Vyper

+0

@jeffrey嘿我檢查互聯網連接使用你的code.but在orResume()方法中的錯誤.. registerReceiver(networkReceiver);在這個方法中registerReceiver要求2個參數。 1用於廣播接收機對象,@用於意圖過濾器。我通過了2的傳球嗎? – Google

2

如果有網絡連接,您不需要經常詢問操作系統。只需檢查onResume()中是否存在連接,然後在連接更改時使用BroadcastReceiver監聽ConnectivityManager的CONNECTIVITY_ACTION意圖,並檢查EXTRA_NO_CONNECTIVITY