2013-06-17 14 views
8

Supponendo che sia WIFI che Dati/3G siano abilitati su un dispositivo, come faccio a verificare se l'utente sta attualmente utilizzando Internet via wifi o il piano dati presumendo che siano entrambi abilitato. Quindi non ho bisogno di controllare se sono abilitati o disabilitati, vorrei rilevare quale sia l'utente che effettivamente usa.Verifica se il cellulare utilizza WIFI o Data/3G

Ho fatto quanto segue, è questa l'unica soluzione?

WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
if (WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState()) == NetworkInfo.DetailedState.CONNECTED) { 
    String ssid = wifiInfo.getSSID(); 
} 
+2

check this out (http://stackoverflow.com/a/11343250/833647) –

+1

@KenWolf molto bello collegamento –

+0

possibile duplicato di [Android: Controllare 3G o la rete Wifi è ON o Disponibile o non su dispositivo Android] (http://stackoverflow.com/questions/11343249/android-check-3g-or-wif-network-is-on-or-available-or-not- on-android-device) – 323go

risposta

19
void chkStatus() { 
    final ConnectivityManager connMgr = (ConnectivityManager) 
    this.getSystemService(Context.CONNECTIVITY_SERVICE); 
    final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
    if (wifi.isConnectedOrConnecting()) { 
     Toast.makeText(this, "Wifi", Toast.LENGTH_LONG).show(); 
    } else if (mobile.isConnectedOrConnecting()) { 
     Toast.makeText(this, "Mobile 3G ", Toast.LENGTH_LONG).show(); 
    } else { 
     Toast.makeText(this, "No Network ", Toast.LENGTH_LONG).show(); 
    } 
} 
+0

cos'è questo downvote per favore commentare così posso lavorare sulle mie risposte per quanto ne so io sono molto corretto –

+2

Se è già stata data una risposta, si prega di collegare alla domanda piuttosto che plagiare la risposta. Certamente la risposta è corretta - dopotutto l'hai copiato. Tuttavia, questo crea solo duplicati su SO, rendendo SO complessivamente meno utilizzabile. – 323go

+1

grazie per il consiglio –

5

è possibile utilizzare il seguente metodo per controllare lo stato della rete ogni volta:

public static String checkNetworkStatus(final Context context) { 

     String networkStatus = ""; 

     // Get connect mangaer 
     final ConnectivityManager connMgr = (ConnectivityManager) 
       context.getSystemService(Context.CONNECTIVITY_SERVICE); 

     // check for wifi 
     final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

     // check for mobile data 
     final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

     if(wifi.isAvailable()) { 
      networkStatus = "wifi"; 
     } else if(mobile.isAvailable()) { 
      networkStatus = "mobileData"; 
     } else { 
      networkStatus = "noNetwork"; 
     } 

     return networkStatus; 

} // end checkNetworkStatus 

// VKJ

0
public boolean CheckConnectivity(final Context c) { 
     ConnectivityManager mConnectivityManager = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (mConnectivityManager.getActiveNetworkInfo() != null 
       && mConnectivityManager.getActiveNetworkInfo().isAvailable() 
       && mConnectivityManager.getActiveNetworkInfo().isConnected()) { 
      return true; 
     } else { 
      return false; // make it false 
     } 
    } 
+0

Puoi spiegare, cosa fa questo codice? – YoungHobbit

1

getNetworkInfo è un metodo obsoleto. Suggerisco di usare getActiveNetworkInfo

Esempio

private String checkNetworkStatus(Context context) { 

    String networkStatus =""; 
    final ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    //Check Wifi 
    final android.net.NetworkInfo wifi = manager.getActiveNetworkInfo(); 
    //Check for mobile data 
    final android.net.NetworkInfo mobile = manager.getActiveNetworkInfo(); 

    if(wifi.getType() == ConnectivityManager.TYPE_WIFI) { 
     networkStatus = "wifi"; 
    }else if(mobile.getType() == ConnectivityManager.TYPE_MOBILE){ 
     networkStatus = "mobileData"; 
    }else{ 
     networkStatus="noNetwork"; 
    } 
    return networkStatus; 
} 
+1

Nel tuo codice entrambi gli oggetti wifi e mobili hanno lo stesso valore. –