Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect if connection is wifi, 3G or EDGE in android?

Tags:

I need to detect in android if there is any connection Wifi or 3G ( or 3G+) or EDGE in android. When there is an connection wifi or 3G I can send photos to server, and when is only a connection EDGE to not send them to server.

I saw that wifi connectivity can be detected with ConnectivityManager.TYPE_WIFI and with ConnectivityManager.TYPE_MOBILE and TelephonyManager.NETWORK_TYPE_EDGE can be detected EDGE connection. But how can be detected 3G or 3G+?

like image 951
Gabrielle Avatar asked Oct 22 '12 08:10

Gabrielle


People also ask

How does Android determine internet connection?

Android devices detect captive portals requesting a specific URL, that currently is http://connectivitycheck.gstatic.com/generate_204. If they receive a 204 response then there's connectivity. If they receive a 30x response, then there's a captive portal in the way.

How do I know if my Android is connected to Wi-Fi?

You should be able to use the ConnectivityManager to get the state of the Wi-Fi adapter. From there you can check if it is connected or even available. AndroidManifest. xml for this to work.

How do you check internet is on or off in android programmatically?

In android, we can determine the internet connection status easily by using getActiveNetworkInfo() method of ConnectivityManager object. Following is the code snippet of using the ConnectivityManager class to know whether the internet connection is available or not.


2 Answers

https://gist.github.com/emil2k/5130324

import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.telephony.TelephonyManager;  /**  * Check device's network connectivity and speed   * @author emil http://stackoverflow.com/users/220710/emil  *  */ public class Connectivity {     /**      * Get the network info      * @param context      * @return      */     public static NetworkInfo getNetworkInfo(Context context){         ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);         return cm.getActiveNetworkInfo();     }      /**      * Check if there is any connectivity      * @param context      * @return      */     public static boolean isConnected(Context context){         NetworkInfo info = Connectivity.getNetworkInfo(context);         return (info != null && info.isConnected());     }      /**      * Check if there is any connectivity to a Wifi network      * @param context      * @return      */     public static boolean isConnectedWifi(Context context){         NetworkInfo info = Connectivity.getNetworkInfo(context);         return (info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_WIFI);     }      /**      * Check if there is any connectivity to a mobile network      * @param context      * @return      */     public static boolean isConnectedMobile(Context context){         NetworkInfo info = Connectivity.getNetworkInfo(context);         return (info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_MOBILE);     }      /**      * Check if there is fast connectivity      * @param context      * @return      */     public static boolean isConnectedFast(Context context){         NetworkInfo info = Connectivity.getNetworkInfo(context);         return (info != null && info.isConnected() && Connectivity.isConnectionFast(info.getType(),info.getSubtype()));     }      /**      * Check if the connection is fast      * @param type      * @param subType      * @return      */     public 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             /*              * Above API level 7, make sure to set android:targetSdkVersion               * to appropriate level to use these              */                 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;         }     } } 
like image 110
Deepu T Avatar answered Sep 25 '22 01:09

Deepu T


public class WifiState {      Context context;      public WifiState(Context context) {         this.context = context;     }      public void haveNetworkConnection() {          boolean haveConnectedWifi = false;         boolean haveConnectedMobile = false;          ConnectivityManager cm = (ConnectivityManager) context                 .getSystemService(context.CONNECTIVITY_SERVICE);         NetworkInfo[] netInfo = cm.getAllNetworkInfo();         for (NetworkInfo ni : netInfo) {             if (ni.getTypeName().equalsIgnoreCase("WIFI"))                 if (ni.isConnected())                     haveConnectedWifi = true;             if (ni.getTypeName().equalsIgnoreCase("MOBILE"))                 if (ni.isConnected())                     haveConnectedMobile = true;          }         if (haveConnectedWifi == false && haveConnectedMobile == false) {              //do something to handle if wifi & mobiledata is disabled          } else {                  //do something else..         }     } 
like image 25
Tobias Moe Thorstensen Avatar answered Sep 27 '22 01:09

Tobias Moe Thorstensen