He estado usando una configuración pequeña para verificar el ancho de banda y determinar cómo escalar cosas, como las imágenes.
Bajo la actividad, en AndroidManifest:
<intent-filter>
...
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
En la actividad donde se llevan a cabo las comprobaciones:
boolean network;
int bandwidth;
@Override
public void onCreate(Bundle savedInstanceState) {
...
network = isDataConnected();
bandwidth = isHighBandwidth();
registerReceiver(new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
network = isDataConnected();
bandwidth = isHighBandwidth();
}
}, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
...
}
...
private boolean isDataConnected() {
try {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo().isConnectedOrConnecting();
} catch (Exception e) {
return false;
}
}
private int isHighBandwidth() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info.getType() == ConnectivityManager.TYPE_WIFI) {
WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
return wm.getConnectionInfo().getLinkSpeed();
} else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
return tm.getNetworkType();
}
return 0;
}
Un ejemplo de uso sería entonces:
if (network) {
if (bandwidth > 16) {
// Code for large items
} else if (bandwidth <= 16 && bandwidth > 8) {
// Code for medium items
} else {
//Code for small items
}
} else {
//Code for disconnected
}
¡Es no es el más bonito, pero permite la suficiente flexibilidad como para cambiar el límite de ancho de banda para los elementos de pendiente de lo que son y mis requisitos para ellos.
hey Gracias funcionó como se esperaba – Sam97305421562
como @noillusioin dice, el activeNetInfo puede ser nulo. Esto es una indicación de que la conexión de red SIMPLEMENTE SE DESCONECTÓ si usted sabe (estado guardado) que usted estaba conectado previamente. – larham1
También debe verificar NetworkInfo.isConnected – shuriquen