Używam małej konfiguracji do sprawdzenia przepustowości w celu określenia sposobu skalowania elementów, takich jak obrazy.
ramach działania, w AndroidManifest:
<intent-filter>
...
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
W działalności, w których kontrole są wykonywane:
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;
}
Przykładem użycia może być następnie:
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
}
To nie jest najładniejsza, ale pozwala na wystarczającą elastyczność, że mogę zmienić ograniczenie przepustowości dla pozycji de w oczekiwaniu na to, czym są i moje wymagania wobec nich.
hej Dzięki temu działało zgodnie z oczekiwaniami – Sam97305421562
jak @noillusioin mówi, activeNetInfo może być null. Oznacza to, że połączenie sieciowe JUST DISCONNECTED zostało wyłączone, jeśli wiesz (zapisałeś stan), że byłeś wcześniej podłączony. – larham1
Należy również sprawdzić NetworkInfo.isConnected – shuriquen