以下是一种使用 ConnectivityManager 类检测慢速网络连接的方法:
private boolean isSlowConnection(Context context) {
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm == null) {
return false;
}
NetworkInfo info = cm.getActiveNetworkInfo();
if (info == null || !info.isConnected()) {
return false;
}
if (info.getType() == ConnectivityManager.TYPE_WIFI) {
return false;
}
//此处设置慢速网络的阈值(kbps)
int minimumSpeedThreshold = 50;
int connectionSpeed = info.getSubtype();
switch (connectionSpeed) {
case TelephonyManager.NETWORK_TYPE_1xRTT:
return minimumSpeedThreshold <= 50;
case TelephonyManager.NETWORK_TYPE_CDMA:
return minimumSpeedThreshold <= 14;
case TelephonyManager.NETWORK_TYPE_EDGE:
return minimumSpeedThreshold <= 50;
case TelephonyManager.NETWORK_TYPE_EVDO_0:
return minimumSpeedThreshold <= 400;
case TelephonyManager.NETWORK_TYPE_EVDO_A:
return minimumSpeedThreshold <= 600;
case TelephonyManager.NETWORK_TYPE_GPRS:
return minimumSpeedThreshold <= 100;
case TelephonyManager.NETWORK_TYPE_HSDPA:
return minimumSpeedThreshold <= 2 * 1000;
case TelephonyManager.NETWORK_TYPE_HSPA:
return minimumSpeedThreshold <= 700;
case TelephonyManager.NETWORK_TYPE_UMTS:
return minimumSpeedThreshold <= 400;
case TelephonyManager.NETWORK_TYPE_EHRPD:
return minimumSpeedThreshold <= 1 * 1000;
case TelephonyManager.NETWORK_TYPE_EVDO_B:
return minimumSpeedThreshold <= 5 * 1000;
case TelephonyManager.NETWORK_TYPE_HSPAP:
return minimumSpeedThreshold <= 10 * 1000;
case TelephonyManager.NETWORK_TYPE_IDEN:
return minimumSpeedThreshold <= 25;
case TelephonyManager.NETWORK_TYPE_LTE:
return minimumSpeedThreshold <= 10 * 1000;
case TelephonyManager.NETWORK_TYPE_UNKNOWN:
default:
return false;
}
}
以上方法将以kbps为单位测量数据速度并将其与最小速度阈值进行比较。您可以更改 minimumSpeedThreshold 变量的值以设置自己的阈值。对于WiFi连接,此方法总是返回 false。只有移动数据连接才会引发