可能重複:
How can I monitor the network connection status in Android?有效的方法來連續檢查是否可用的Internet連接Android中
我需要不斷地上網查是否連接與否和更新文本區域因此帶有適當的信息。現在,如果我創建一個asynctask它將執行一次並停止這不是我想要的。我想連續檢查,顯然這不應該在主線上。所以服務不會是一個不錯的選擇。任何人都可以幫助我解決這個問題的最佳方法是什麼?謝謝
可能重複:
How can I monitor the network connection status in Android?有效的方法來連續檢查是否可用的Internet連接Android中
我需要不斷地上網查是否連接與否和更新文本區域因此帶有適當的信息。現在,如果我創建一個asynctask它將執行一次並停止這不是我想要的。我想連續檢查,顯然這不應該在主線上。所以服務不會是一個不錯的選擇。任何人都可以幫助我解決這個問題的最佳方法是什麼?謝謝
用接收器做。您可以收到有關網絡狀態更改的通知。例如,
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" />
如果有網絡連接,您不需要經常詢問操作系統。只需檢查onResume()
中是否存在連接,然後在連接更改時使用BroadcastReceiver監聽ConnectivityManager的CONNECTIVITY_ACTION
意圖,並檢查EXTRA_NO_CONNECTIVITY
。
爲什麼你需要這樣做嗎? –