2010-07-16 11 views
31

Qui, il mio dispositivo Android supporta sia Wi-Fi e 3G. In determinati momenti, quale rete è disponibile su questo dispositivo. Perché il mio requisito è quando 3g è disponibile, devo caricare una piccola quantità di dati. quando la rete wifi è disponibile, è necessario caricare tutti i dati. Quindi, devo verificare che la connessione sia wifi o 3G. Mi aiuti per favore. Grazie in anticipo.come controllare la rete wifi o 3G è disponibile su dispositivo Android

+0

@govardhan: +1 Anch'io ho questo problema. hai avuto qualche risposta? – Praveen

+1

Dai un'occhiata a http://stackoverflow.com/questions/2789612/how-can-i-check-whether-an-android-device-is-connected-to-the-web http://stackoverflow.com/questions/3119607/how-to-be-notify-on-wifi-network-status-change http://stackoverflow.com/questions/3211978/how-to-check-internet-connectivity-in-android http://stackoverflow.com/questions/2919414/get-network-type http://stackoverflow.com/search?q = ConnectivityManager – Fedor

+0

Questo link contiene il codice necessario http://stackoverflow.com/a/9256972/191246. – ccpizza

risposta

54

Io uso questo:

/** 
* Checks if we have a valid Internet Connection on the device. 
* @param ctx 
* @return True if device has internet 
* 
* Code from: http://www.androidsnippets.org/snippets/131/ 
*/ 
public static boolean haveInternet(Context ctx) { 

    NetworkInfo info = (NetworkInfo) ((ConnectivityManager) ctx 
      .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 

    if (info == null || !info.isConnected()) { 
     return false; 
    } 
    if (info.isRoaming()) { 
     // here is the roaming option you can change it if you want to 
     // disable internet while roaming, just return false 
     return false; 
    } 
    return true; 
} 

È inoltre necessario

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

in AndroidMainfest.xml

per ottenere il tipo di rete è possibile utilizzare questo frammento di codice:

ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

//mobile 
State mobile = conMan.getNetworkInfo(0).getState(); 

//wifi 
State wifi = conMan.getNetworkInfo(1).getState(); 

e quindi utilizzarlo come quella:

if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING) { 
    //mobile 
} else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING) { 
    //wifi 
} 

per ottenere il tipo di rete mobile vorrei provare TelephonyManager#getNetworkType o NetworkInfo#getSubtypeName

+0

Questo codice mi dà errore quando lo uso su un tablet senza sim. –

1

È necessario aggiungere di seguito il permesso in Android file manifesto:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

Successivamente è possibile utilizzare le seguenti funzioni per verificare se la rete wifi o mobile è connessa o meno

public static boolean isWifiConnected(Context context) { 
     ConnectivityManager connManager = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     return ((netInfo != null) && netInfo.isConnected()); 
    } 

public static boolean isMobileConnected(Context context) { 
     ConnectivityManager connManager = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
     return ((netInfo != null) && netInfo.isConnected()); 
    } 

Alcuni riferimenti da developer.android.com sono:

  1. https://developer.android.com/reference/android/net/ConnectivityManager.html
  2. https://developer.android.com/reference/android/net/NetworkInfo.html
  3. https://developer.android.com/reference/android/net/ConnectivityManager.html#getActiveNetworkInfo()
0

prima ottenere un riferimento al ConnectivityManager e poi check the Wifi and 3G status del dispositivo. Avrai bisogno del permesso ACCESS_NETWORK_STATE per utilizzare questo servizio.

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    if (mWifi.isAvailable() == true) { 
     return "Connected to WiFi"; 
    } else if (mMobile.isAvailable() == true) { 
     return "Connected to Mobile Network"; 
    } else return "No internet Connection" 
0

È possibile utilizzare questo metodo per verificare se la connessione a Internet è 2G, 3G o 4G:

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 "2G"; 
     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 "3G"; 
     case TelephonyManager.NETWORK_TYPE_LTE: 
      return "4G"; 
     default: 
      return "Unknown"; 
    } 
} 

E metodo che utilizza seguente è possibile verificare se internet è disponibile o non, e ottenere se si sta accedendo a Internet tramite una rete mobile o WiFi:

public String getNetworkType(Context context){ 
    String networkType = null; 
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo(); 
    if (activeNetwork != null) { // connected to the internet 
     if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { 
       networkType = "WiFi"; 
     } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { 
      networkType = "Mobile"; 
     } 
    } else { 
     // not connected to the internet 
    } 
    return networkType; 
} 
Problemi correlati