2017-07-17 129 views
2

在我的應用程序我有這種方法,它告訴我,如果有互聯網連接或不,但我想知道是否有方法來檢查它是否是一個很好的網絡連接。Android檢查互聯網連接

public static boolean existInternetConnection() { 
    boolean booThereConnection = false; 
    if (context == null) 
     context = activity.getApplicationContext(); 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnectedOrConnecting()) 
     booThereConnection = true; 

    return booThereConnection; 
} 

回答

2

試試這個。但請記住,android總是說WiFi網絡總是比移動網絡更強大。所以我的代碼是用來檢查移動數據的強度。

import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.telephony.TelephonyManager; 

public class Connectivity { 
    /* 
    * HACKISH: These constants aren't yet available in my API level (7), but I need to handle these cases if they come up, on newer versions 
    */ 
    public static final int NETWORK_TYPE_EHRPD=14; // Level 11 
    public static final int NETWORK_TYPE_EVDO_B=12; // Level 9 
    public static final int NETWORK_TYPE_HSPAP=15; // Level 13 
    public static final int NETWORK_TYPE_IDEN=11; // Level 8 
    public static final int NETWORK_TYPE_LTE=13; // Level 11 

    /** 
    * Check if there is any connectivity 
    * @param context 
    * @return 
    */ 
    public static boolean isConnected(Context context){ 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo info = cm.getActiveNetworkInfo(); 
     return (info != null && info.isConnected()); 
    } 
    /** 
    * Check if there is fast connectivity 
    * @param context 
    * @return 
    */ 
    public static boolean isConnectedFast(Context context){ 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo info = cm.getActiveNetworkInfo(); 
     return (info != null && info.isConnected() && Connectivity.isConnectionFast(info.getType(),info.getSubtype())); 
    } 

    /** 
    * Check if the connection is fast 
    * @param type 
    * @param subType 
    * @return 
    */ 
    public static boolean isConnectionFast(int type, int subType){ 
     if(type==ConnectivityManager.TYPE_WIFI){ 
      System.out.println("CONNECTED VIA WIFI"); 
      return true; 
     }else if(type==ConnectivityManager.TYPE_MOBILE){ 
      switch(subType){ 
      case TelephonyManager.NETWORK_TYPE_1xRTT: 
       return false; // ~ 50-100 kbps 
      case TelephonyManager.NETWORK_TYPE_CDMA: 
       return false; // ~ 14-64 kbps 
      case TelephonyManager.NETWORK_TYPE_EDGE: 
       return false; // ~ 50-100 kbps 
      case TelephonyManager.NETWORK_TYPE_EVDO_0: 
       return true; // ~ 400-1000 kbps 
      case TelephonyManager.NETWORK_TYPE_EVDO_A: 
       return true; // ~ 600-1400 kbps 
      case TelephonyManager.NETWORK_TYPE_GPRS: 
       return false; // ~ 100 kbps 
      case TelephonyManager.NETWORK_TYPE_HSDPA: 
       return true; // ~ 2-14 Mbps 
      case TelephonyManager.NETWORK_TYPE_HSPA: 
       return true; // ~ 700-1700 kbps 
      case TelephonyManager.NETWORK_TYPE_HSUPA: 
       return true; // ~ 1-23 Mbps 
      case TelephonyManager.NETWORK_TYPE_UMTS: 
       return true; // ~ 400-7000 kbps 
      // NOT AVAILABLE YET IN API LEVEL 7 
      case Connectivity.NETWORK_TYPE_EHRPD: 
       return true; // ~ 1-2 Mbps 
      case Connectivity.NETWORK_TYPE_EVDO_B: 
       return true; // ~ 5 Mbps 
      case Connectivity.NETWORK_TYPE_HSPAP: 
       return true; // ~ 10-20 Mbps 
      case Connectivity.NETWORK_TYPE_IDEN: 
       return false; // ~25 kbps 
      case Connectivity.NETWORK_TYPE_LTE: 
       return true; // ~ 10+ Mbps 
      // Unknown 
      case TelephonyManager.NETWORK_TYPE_UNKNOWN: 
       return false; 
      default: 
       return false; 
      } 
     }else{ 
      return false; 
     } 
    } 

} 
+0

從技術上講,如果我只驗證子類型,它會告訴我,如果conection是快速排除它的類型? – user3586826

+0

@ user3586826是的,你是對的。它只會檢查網速。 –

0

試試這個

if (networkConnectivity()) 
{ 
    try 
    { 
     HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.anywebsiteyouthinkwillnotbedown.com").openConnection()); 
     urlc.setRequestProperty("User-Agent", "Test"); 
     urlc.setRequestProperty("Connection", "close"); 
     urlc.setConnectTimeout(3000); //choose your own timeframe 
     urlc.setReadTimeout(4000); //choose your own timeframe 
     urlc.connect(); 
     networkcode2 = urlc.getResponseCode(); 
     return (urlc.getResponseCode() == 200); // good connection 
    } catch (IOException e) 
    { 
     return (false); //connectivity exists, but no internet. 
    } 
} else 
{ 
    return false; //no connectivity 
}