Создаем ресивер, для отслеживания изменения подключения. Инициализируем ресивер в манифесте:
<receiver
android:name=".NetworkReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Ресивер будет реагировать на подключение к интернету и отключение от него. Но не будет возможности отслеживать изменение типа подключения, например с 3g на 2g.
Но если у нас 3g сменилось 2g, и мы отключим передачу данных, а затем снова запустим, отобразится 2g.
Так же данную проверку можно использовать для выбора метода обращения к серверу - тяжелого или легковесного.
public class NetworkReceiver extends BroadcastReceiver {
String str2G = "2G";
String str3G = "3G";
String str4G = "4G";
String strWiFi = "WiFi";
String strMobile = "Mobile";
public NetworkReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
if (getNetworkConnectionType(context).equals(strWiFi))
Toast.makeText(context, strWiFi, Toast.LENGTH_SHORT).show();
else if (getNetworkConnectionType(context).equals(strMobile))
Toast.makeText(context, getNetworkClass(context), Toast.LENGTH_SHORT).show();
else
Toast.makeText(context, "No connection", Toast.LENGTH_SHORT).show();
}
public String getNetworkClass(Context context) {
TelephonyManager mTelephonyManager = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
int networkType = mTelephonyManager.getNetworkType();
switch (networkType) {
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_EDGE:
case TelephonyManager.NETWORK_TYPE_CDMA:
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN:
return str2G;
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case TelephonyManager.NETWORK_TYPE_EVDO_B:
case TelephonyManager.NETWORK_TYPE_EHRPD:
case TelephonyManager.NETWORK_TYPE_HSPAP:
return str3G;
case TelephonyManager.NETWORK_TYPE_LTE:
return str4G;
default:
return "Unknown";
}
}
private String getNetworkConnectionType(Context context) {
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
boolean isMobile = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
.isConnectedOrConnecting();
boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.isConnectedOrConnecting();
if (isMobile)
return strMobile;
else if (isWifi)
return strWiFi;
else
return "No connection";
}
}