-
-
Save JonathanPrecise/80be6dcd79f24af49773978c04d48512 to your computer and use it in GitHub Desktop.
Android utility class for checking device's network connectivity and speed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.jonathan.misc.utils; | |
import android.content.Context; | |
import android.net.ConnectivityManager; | |
import android.net.NetworkInfo; | |
import android.telephony.TelephonyManager; | |
/** | |
* Check device's network connectivity and speed | |
* @author emil http://stackoverflow.com/users/220710/emil | |
* | |
* Modified to specify abreviation for each type, removed isConnectedFast() | |
*/ | |
public class Connectivity { | |
public static final String ABBREV_1X = "1X"; | |
public static final String ABBREV_CDMA = "C?"; | |
public static final String ABBREV_EDGE = "E"; | |
public static final String ABBREV_EVDO = "3G"; | |
public static final String ABBREV_GPRS = "G"; | |
public static final String ABBREV_H = "H"; | |
public static final String ABBREV_U = "U"; | |
public static final String ABBREV_EVDOPLUS = ABBREV_EVDO + "+"; | |
public static final String ABBREV_HPLUS = ABBREV_H + "+"; | |
public static final String ABBREV_IDEN = "i"; | |
public static final String ABBREV_LTE = "LTE"; | |
public static final String ABBREV_UNKNOWN = "?"; | |
/** | |
* Get the network info | |
* @param context | |
* @return | |
*/ | |
public static NetworkInfo getNetworkInfo(Context context){ | |
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); | |
return cm.getActiveNetworkInfo(); | |
} | |
/** | |
* Check if there is any connectivity | |
* @param context | |
* @return | |
*/ | |
public static boolean isConnected(Context context){ | |
NetworkInfo info = Connectivity.getNetworkInfo(context); | |
return (info != null && info.isConnected()); | |
} | |
/** | |
* Check if there is any connectivity to a Wifi network | |
* @param context | |
* @return | |
*/ | |
public static boolean isConnectedWifi(Context context){ | |
NetworkInfo info = Connectivity.getNetworkInfo(context); | |
return (info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_WIFI); | |
} | |
/** | |
* Check if there is any connectivity to a mobile network | |
* @param context | |
* @return | |
*/ | |
public static boolean isConnectedMobile(Context context){ | |
NetworkInfo info = Connectivity.getNetworkInfo(context); | |
return (info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_MOBILE); | |
} | |
/** | |
* Get the appropriate connection abbreviation | |
* @param context | |
* @return | |
*/ | |
public static String getConnectionAbbreviation(Context context){ | |
NetworkInfo info = Connectivity.getNetworkInfo(context); | |
boolean connected = (info != null) && (info.isConnected()); | |
if (!connected) { | |
return " "; | |
} | |
return Connectivity.getConnectionAbbrev(info.getType(),info.getSubtype()); | |
} | |
/** | |
* Get the appropriate connection abbreviation | |
* @param type | |
* @param subType | |
* @return | |
*/ | |
private static String getConnectionAbbrev(int type, int subType){ | |
if (type==ConnectivityManager.TYPE_WIFI) { | |
return " "; | |
} else if(type==ConnectivityManager.TYPE_MOBILE) { | |
switch(subType){ | |
case TelephonyManager.NETWORK_TYPE_1xRTT: | |
return ABBREV_1X; // ~ 50-100 kbps | |
case TelephonyManager.NETWORK_TYPE_CDMA: | |
return ABBREV_CDMA; // ~ 14-64 kbps | |
case TelephonyManager.NETWORK_TYPE_EDGE: | |
return ABBREV_EDGE; // ~ 50-100 kbps | |
case TelephonyManager.NETWORK_TYPE_EVDO_0: | |
return ABBREV_EVDO; // ~ 400-1000 kbps | |
case TelephonyManager.NETWORK_TYPE_EVDO_A: | |
return ABBREV_EVDO; // ~ 600-1400 kbps | |
case TelephonyManager.NETWORK_TYPE_GPRS: | |
return ABBREV_GPRS; // ~ 100 kbps | |
case TelephonyManager.NETWORK_TYPE_HSDPA: | |
return ABBREV_H; // ~ 2-14 Mbps | |
case TelephonyManager.NETWORK_TYPE_HSPA: | |
return ABBREV_H; // ~ 700-1700 kbps | |
case TelephonyManager.NETWORK_TYPE_HSUPA: | |
return ABBREV_H; // ~ 1-23 Mbps | |
case TelephonyManager.NETWORK_TYPE_UMTS: | |
return ABBREV_U; // ~ 400-7000 kbps | |
case TelephonyManager.NETWORK_TYPE_EHRPD: // API level 11 | |
return ABBREV_EVDOPLUS; // ~ 1-2 Mbps | |
case TelephonyManager.NETWORK_TYPE_EVDO_B: // API level 9 | |
return ABBREV_EVDOPLUS; // ~ 5 Mbps | |
case TelephonyManager.NETWORK_TYPE_HSPAP: // API level 13 | |
return ABBREV_HPLUS; // ~ 10-20 Mbps | |
case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8 | |
return ABBREV_IDEN; // ~25 kbps | |
case TelephonyManager.NETWORK_TYPE_LTE: // API level 11 | |
return ABBREV_LTE; // ~ 10+ Mbps | |
// Unknown | |
case TelephonyManager.NETWORK_TYPE_UNKNOWN: | |
default: | |
return ABBREV_UNKNOWN; | |
} | |
} else { | |
return " "; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment