2012-09-24 36 views
5

thể trùng lặp:
How can I monitor the network connection status in Android?cách tiếp cận hiệu quả để liên tục kiểm tra xem kết nối internet là có sẵn trong Android

tôi cần phải liên tục kiểm tra xem mạng Internet được kết nối hay không và cập nhật các vùng văn bản phù hợp với thông điệp thích hợp. Bây giờ nếu tôi tạo một asynctask nó sẽ thực hiện một lần và dừng lại không phải là những gì tôi muốn. Tôi muốn kiểm tra tại mọi thời điểm liên tục và rõ ràng điều này không nên trên chủ đề chính. Vì vậy, Dịch vụ cũng sẽ không phải là lựa chọn tốt. Bất cứ ai có thể giúp tôi Cách tiếp cận tốt nhất và hiệu quả để xử lý này là gì. Cảm ơn

+2

Tại sao bạn cần phải làm điều này? –

Trả lời

7

làm điều đó với người nhận. bạn có thể được thông báo về thay đổi trạng thái mạng. ví dụ,

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 
    } 
} 

đăng ký này trong onResume() của bạn, và unregister trên 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); 
} 

thêm vào đó, để có được tình trạng ban đầu trước khi nhận bạn đã đăng ký, gọi đây là trong phương pháp onResume() của bạn,

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

đảm bảo các yêu cầu ứng dụng của bạn cho phép này,

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

Khi tôi bật và tắt wifi của mình Bộ thu phát sóng không hoạt động. Mã Onresume hoạt động hoàn hảo nhưng máy thu phát không thông báo cho tôi bất kỳ thay đổi nào. bất kỳ giúp đỡ? – Vyper

+0

Tôi chỉ tìm ra được lỗi lầm! – Vyper

+0

@jeffrey hey tôi kiểm tra kết nối internet bằng cách sử dụng code.but của bạn cho lỗi trong phương pháp orResume() .. registerReceiver (networkReceiver); trong phương thức này registerReceiver yêu cầu 2 tham số. 1 cho đối tượng thu phát sóng và @ cho bộ lọc ý định. wht tôi vượt qua insted của 2? – Google

2

Bạn không cần phải liên tục hỏi hệ điều hành nếu có kết nối mạng. Chỉ cần kiểm tra xem kết nối có tồn tại trong onResume() và sau đó sử dụng BroadcastReceiver để nghe Mục đích CONNECTIVITY_ACTION từ ConnectivityManager khi kết nối được thay đổi và kiểm tra EXTRA_NO_CONNECTIVITY.

Các vấn đề liên quan