2012-04-04 26 views
12

Trong ứng dụng của tôi, mà tôi thử nghiệm trên giả lập, tôi sử dụng đoạn mã sau để kiểm tra kết nối mạng (WIFI):Kiểm tra android

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

Phương pháp này luôn trả về true, ngay cả khi tôi vô hiệu hóa không dây kết nối của máy tính của tôi ... Điều này có phải do trình mô phỏng gây ra hay không?

Nếu đây không phải là cách phù hợp để kiểm tra kết nối mạng, tôi có thể làm như thế nào?

+0

kiểm tra mã này sau khi đặt trình giả lập trong chế độ máy bay – vipin

+0

bạn đã thử 'isAvailable()' hoặc 'isConnected()' chưa? – olix20

+0

@vipin, Trong chuyến bay nó trả về false trong cả hai tình huống ... – amp

Trả lời

35

Nó tốt hơn để (1) vượt qua trong bối cảnh sao cho mọi hoạt động có thể gọi chức năng này, và (2) Thực hiện chức năng này tĩnh:

public boolean isNetworkOnline() { 
    boolean status=false; 
    try{ 
     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getNetworkInfo(0); 
     if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) { 
      status= true; 
     }else { 
      netInfo = cm.getNetworkInfo(1); 
      if(netInfo!=null && netInfo.getState()==NetworkInfo.State.CONNECTED) 
       status= true; 
     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
     return false; 
    } 
    return status; 

    } 
+0

nó trả về đúng như trước đây ... – amp

+0

mã là chính xác nó sẽ hoạt động tốt trên bất kỳ thiết bị – Nishant

+0

Nhưng tôi cần phải thử nghiệm trên giả lập ... Một số thay thế ? – amp

6

Để có được getActiveNetworkInfo() để làm việc bạn cần thêm phần sau vào tệp kê khai.

1. uses-permission android:name="android.permission.INTERNET" 
2. uses-permission 
    android:name="android.permission.ACCESS_NETWORK_STATE" 

tốt hơn để sử dụng netInfo.isConnected() chứ không phải là netInfo.isConnectedOrConnecting

và cũng cố gắng này

Context.getSystemService(Context.CONNECTIVITY_SERVICE).getNetworkInfo(ConnectivityManager.TYPE_MOBILE) 

hoặc

Context.getSystemService(Context.CONNECTIVITY_SERVICE).requestRouteToHost(TYPE_WIFI, int hostAddress) 
0

Trong trường hợp của tôi, tôi quay OFF Wifi, nhưng quên tắt kết nối mạng dữ liệu/di động. Một khi tôi đã làm điều đó, mã trong bài gốc cho chủ đề này làm việc cho tôi.

Để tóm tắt lại:

  1. Đến Cài đặt
  2. Turn Off Wifi
  3. Đến Settings-> Dữ liệu Cách sử dụng
  4. Tắt Mobile Data

Settings

Settings->Data Usage

-1

Đây là cách tôi đặt nó lại với nhau trong một dự án:

Manifest file:

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

Static Function:

public static boolean isNwConnected(Context context) { 
    if (context == null) { 
     return true; 
    } 
    ConnectivityManager connectivityManager = 
     (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo nwInfo = connectivityManager.getActiveNetworkInfo(); 
    if (nwInfo != null && nwInfo.isConnectedOrConnecting()) { 
     return true; 
    } 
    return false; 
} 
0

Chúng ta có thể kiểm tra kết nối internet trạng thái kết nối sử dụng bên dưới chức năng. Google Android đã cập nhật chức năng của API Android để kiểm tra trạng thái mạng.Now trong API mới nhất của Android, getAllNetworkInfo() không được chấp nhận. nhưng hàm getAllNetworks() chỉ được phép cho Build.VERSION.SDK_INT> = 21.Tôi đã viết mã cho tất cả các trường hợp.

Để kiểm tra kết nối internet, bạn có thể gọi chức năng này.

public static boolean checkInternetConnection(Context context) { 
     ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity == null) { 
     return false; 
    } else if(Build.VERSION.SDK_INT >= 21){ 
     Network[] info = connectivity.getAllNetworks(); 
     if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
       if (info[i] != null && connectivity.getNetworkInfo(info[i]).isConnected()) { 
        return true; 
       } 
      } 
     } 
    } else { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
     if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
        return true; 
       } 
      } 
     } 
     final NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo(); 
     if (activeNetwork != null && activeNetwork.isConnected()) { 
      return true; 
     } 
    } 

    return false; 
} 
Các vấn đề liên quan