2012-11-15 37 views
14

Android chính xác xác định sự khác biệt giữa các trạng thái sau đây như thế nào?Android chính xác như thế nào để xác định xem nó có trực tuyến không?

  1. Có giao diện mạng hoạt động (ví dụ: Wifi hoặc 3G) nhưng không thể truy cập internet.

  2. Có giao diện mạng đang hoạt động và cần yêu cầu người dùng đăng nhập vào mạng trên trang web.

  3. Có giao diện mạng đang hoạt động và có thể truy cập internet.

Có lẽ nó gửi một yêu cầu HTTP đơn giản tới URL cố định (có lẽ trên google.com?) Và kiểm tra xem tài liệu có được trả lại không? Nếu vậy, chúng ta có biết URL được sử dụng không?

Trả lời

0

Có bạn cũng có thể gửi một ping :)

Các hoạt động theo thứ tự bạn nên sử dụng trong một lớp util mạng nhỏ sẽ là: - Kiểm tra xem giao diện trực tuyến - Kiểm tra xem nó có thể mở một ổ cắm Google.com in hoặc google.com ping

0

Hãy thử điều này:

public static boolean isNetworkAvailable(Context context) 
{ 
    ConnectivityManager cm = (ConnectivityManager) context 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo info = cm.getActiveNetworkInfo(); 

    return (info != null); 
} 
1

UPDATE: cập nhật các mã để tránh NetworkOnMainThreadException

Tôi hiện đang sử dụng các phương pháp sau đây để xác định xem thiết bị có thể truy cập vào internet hay không:

public class NetworkConnectivityHelper { 
    public void isDeviceConnectedToInternet(final Activity activity, final ResultCallback callback){ 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       boolean isDeviceConnectedToInternet = false; 
       NetworkInfo activeNetworkInfo = ((ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 

       if(activeNetworkInfo != null && activeNetworkInfo.isConnected()){ 
        try { 
         InetAddress.getByName("google.com").isReachable(2); 
         isDeviceConnectedToInternet = true; 
        } catch (UnknownHostException e){ 
         isDeviceConnectedToInternet = false; 
        } catch (IOException e){ 
         isDeviceConnectedToInternet = false; 
        } 
       } 

       final boolean result = isDeviceConnectedToInternet; 
       activity.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         callback.done(result); 
        } 
       }); 

      } 
     }).start(); 

    } 


    public static abstract class ResultCallback{ 
     public abstract void done(boolean connected); 
    } 
} 

cuộc gọi này bằng cách:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    .... 
    //Populate 
    NetworkConnectivityHelper networkConnectivityHelper = new NetworkConnectivityHelper(); 
    networkConnectivityHelper.isDeviceConnectedToInternet(activity, new NetworkConnectivityHelper.ResultCallback() { 
     @Override 
     public void done(boolean connected) { 
      if (connected) { 
       //Yey, the device is connected. 
       //Now, do some work 
      }else{ 
       //The device is disconnected 
      } 
     } 
    }); 
    .... 

} 

hy vọng điều này giúp!

+0

Thao tác này sẽ hủy xuất hiện trên các phiên bản Android mới hơn để sử dụng kết nối mạng trên chuỗi chính. Ngoài ra, trên mạng wifi tôi đã thử nghiệm trên đó yêu cầu đăng nhập, kiểm tra này vẫn trở lại như được kết nối khi nó không nên. – schwiz

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