2012-09-15 29 views
5

Mã này luôn trả về đúng sự thật. Điều này được gọi khi nhấn nút Đăng nhập. Lần đầu tiên tôi thử kết nối wifi (trên trình mô phỏng). Nó trở lại sự thật và sau đó tôi ngắt kết nối wifi và sau đó thử. nó vẫn trả về sự thật.Thông tin mạng Android luôn trả về true ngay cả khi internet không có sẵn

public static boolean isNetworkAvailable(Context context) { 

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
      NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
      // if no network is available networkInfo will be null 
      // otherwise check if we are connected 
      if (networkInfo != null && networkInfo.isConnected()) { 
       State network = networkInfo.getState(); 
       Log.d("here", "true"); 
       return (network == NetworkInfo.State.CONNECTED || network == NetworkInfo.State.CONNECTING); 

      } 
      Log.d("here1", "false"); 
      return false; 
} 

Trả lời

14

Mã này hoạt động trên thiết bị vì tôi đang sử dụng một thứ rất giống một trong các ứng dụng của mình. Xin lưu ý rằng mã này sẽ cho bạn biết liệu bạn có đang ở trạng thái kết nối với mạng hay không, cho dù mạng bạn kết nối có kết nối internet hay không. Nếu bạn đang sử dụng trình mô phỏng, nó luôn được kết nối qua mô phỏng 3G, vì vậy ngắt kết nối wifi của máy tính sẽ không thay đổi điều đó. Bạn có thể đặt trình mô phỏng ở chế độ trên máy bay, chế độ này sẽ cho bạn "sai" mà bạn đang tìm kiếm.

Điều tôi đã làm trong ứng dụng của mình là tạo một dịch vụ nhận các chương trình phát sóng thay đổi mạng. Khi một mạng được kết nối, sau đó nó sẽ cố gắng tải xuống một tệp (nhỏ) đã biết qua internet. Chỉ khi điều đó thành công thì nó sẽ phát sóng ý định có sẵn trên internet cho tất cả các hoạt động, sau đó có thể thay đổi trạng thái dựa trên điều này.

+0

Vì vậy, không có cách trực tiếp nào để biết Internet có khả dụng hay không? –

+0

Không có. Vấn đề là "mạng" là một vấn đề định nghĩa ở đây. Bạn có thể kết nối với wifi, với quyền truy cập đầy đủ vào mạng nội bộ và điều đó có thể phù hợp với ứng dụng của bạn. Bạn cũng có thể ngồi sau một tường lửa rất hạn chế, chặn, ví dụ, www.facebook.com để giữ cho năng suất của nhân viên tăng lên. Bạn sẽ cần thực hiện kiểm tra rõ ràng đối với dịch vụ bạn quan tâm hoặc url chung. ConnectivityService của tôi không phải là khoa học tên lửa, và tôi sẽ làm sạch nó và đăng nó ở đây khi tôi có một chút thời gian - có lẽ không phải trước thứ hai mặc dù. – 323go

+1

câu trả lời tuyệt vời lý do tôi nếu tôi trích dẫn câu trả lời của bạn bất cứ khi nào nó phù hợp bởi vì nó làm tôi phát điên 1 – shareef

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