2013-06-17 4 views
8

Angenommen, dass sowohl WIFI als auch Data/3G auf einem Gerät aktiviert sind, wie überprüfe ich, ob der Benutzer das Internet derzeit über das WLAN oder den Datentarif nutzt aktiviert. Ich muss also nicht prüfen, ob sie aktiviert oder deaktiviert sind, ich möchte herausfinden, welcher der Benutzer tatsächlich verwendet.Prüfen, ob Mobilgerät WIFI oder Data/3G verwendet

Ich habe das folgende getan, ist dies die einzige Lösung?

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 sehr schön Link –

+0

möglich Duplikat [Android zu verwenden: Überprüfen 3G oder WLAN-Netzwerk ist ON oder verfügbar oder nicht auf Android-Gerät] (http://stackoverflow.com/questions/11343249/android-check-3g-or-wifi-network-is-on-or-available-or-not- on-android-device) – 323go

Antwort

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

Was ist das für ein Kommentar, so dass ich an meinen Antworten arbeiten kann, soweit ich weiß, dass ich sehr korrekt bin –

+2

Wenn es bereits beantwortet wurde, bitte Link zu der Frage, anstatt die Antwort zu plagiieren. Sicher ist die Antwort richtig - du hast es doch kopiert. Dies erzeugt jedoch nur Duplikate auf SO, wodurch SO insgesamt weniger verwendbar wird. – 323go

+1

danke für den Ratschlag –

5

können Sie die folgende Methode verwenden jedes Mal, Netzwerkstatus zu überprüfen:

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

Können Sie erklären, was dieser Code tut? – YoungHobbit

1

getNetworkInfo eine veraltete Methode. Ich schlage vor, getActiveNetworkInfo

Beispiel

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

In Ihrem Code haben sowohl WLAN als auch mobile Objekte denselben Wert. –

Verwandte Themen