2013-06-17 24 views
8

Zakładając, że w urządzeniu jest włączona zarówno sieć WIFI, jak i Data/3G, w jaki sposób mogę sprawdzić, czy użytkownik aktualnie korzysta z Internetu przez sieć Wi-Fi lub z planu transmisji danych, zakładając, że oba są włączony. Nie muszę więc sprawdzać, czy są one włączone czy wyłączone, chciałbym wykryć, którego z nich faktycznie używa użytkownik.Sprawdź, czy urządzenie przenośne korzysta z WIFI lub Data/3G

Robię co następuje, czy to jedyne rozwiązanie?

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

to sprawdzić (http://stackoverflow.com/a/11343250/833647) –

+1

@KenWolf bardzo ładne połączenie –

+0

możliwe duplikat [Android: Sprawdź 3G lub sieć Wi-Fi jest włączona lub niedostępna na urządzeniu z Androidem] (http://stackoverflow.com/questions/11343249/android-check-3g-or-wifi-network-is-on-or-available-or-not- na urządzeniu z Androidem) – 323go

Odpowiedz

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

co to jest za komentarz do komentarza, więc mogę popracować nad moimi odpowiedziami, o ile wiem, że jestem w pełni poprawny. –

+2

Jeśli odpowiedź już została udzielona, ​​proszę podać link do pytania, zamiast plagiatować odpowiedź. Z pewnością odpowiedź jest poprawna - w końcu ją skopiowałeś. Jednak to właśnie tworzy duplikaty na SO, dzięki czemu SO jest ogólnie mniej przydatny. – 323go

+1

dziękuję za poradę –

5

Możesz skorzystać z następujących metod, aby sprawdzić stan sieci za każdym razem:

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

Czy możesz wyjaśnić, co ten kod robi? – YoungHobbit

1

getNetworkInfo to metoda przestarzała. Proponuję użyć getActiveNetworkInfo

Przykład

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

W kodzie zarówno wifi, jak i obiekty mobilne mają tę samą wartość. –

Powiązane problemy