Created
March 3, 2017 17:09
-
-
Save demixdn/ca3b4e1eefb7f0dd6b19631766610aa2 to your computer and use it in GitHub Desktop.
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
import android.content.Context; | |
import android.net.ConnectivityManager; | |
import android.net.NetworkInfo; | |
import android.support.annotation.NonNull; | |
import android.telephony.TelephonyManager; | |
@SuppressWarnings("unused") | |
public final class Connectivity { | |
private Connectivity() { | |
//empty | |
} | |
/** | |
* Get the network info | |
*/ | |
private static NetworkInfo getNetworkInfo(@NonNull Context context) { | |
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); | |
return cm.getActiveNetworkInfo(); | |
} | |
/** | |
* Check if there is any connectivity | |
*/ | |
public static boolean isConnected(@NonNull Context context) { | |
NetworkInfo info = getNetworkInfo(context); | |
return info != null && info.isConnected(); | |
} | |
/** | |
* Check if there is any connectivity to a Wifi network | |
*/ | |
public static boolean isConnectedWifi(@NonNull Context context) { | |
NetworkInfo info = getNetworkInfo(context); | |
return info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_WIFI; | |
} | |
/** | |
* Check if there is any connectivity to a mobile network | |
*/ | |
public static boolean isConnectedMobile(@NonNull Context context) { | |
NetworkInfo info = getNetworkInfo(context); | |
return info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_MOBILE; | |
} | |
/** | |
* Check if there is fast connectivity | |
*/ | |
public static boolean isConnectedFast(@NonNull Context context) { | |
NetworkInfo info = getNetworkInfo(context); | |
return info != null && info.isConnected() && isConnectionFast(info.getType(), info.getSubtype()); | |
} | |
private static boolean isConnectionFast(int type, int subType) { | |
if (type == ConnectivityManager.TYPE_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 | |
case TelephonyManager.NETWORK_TYPE_EHRPD: // API level 11 | |
return true; // ~ 1-2 Mbps | |
case TelephonyManager.NETWORK_TYPE_EVDO_B: // API level 9 | |
return true; // ~ 5 Mbps | |
case TelephonyManager.NETWORK_TYPE_HSPAP: // API level 13 | |
return true; // ~ 10-20 Mbps | |
case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8 | |
return false; // ~25 kbps | |
case TelephonyManager.NETWORK_TYPE_LTE: // API level 11 | |
return true; // ~ 10+ Mbps | |
// Unknown | |
case TelephonyManager.NETWORK_TYPE_UNKNOWN: | |
default: | |
return false; | |
} | |
} else { | |
return false; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment