2011-11-02 15 views
15

Muszę ustalić, czy urządzenie z Androidem jest podłączone do Wi-Fi, a jeśli tak, to uzyskać adres IP Wi-Fi.Wykryj adres IP Wi-Fi w systemie Android?

Wiem, jak korzystać z ConnectivityManager, aby określić, czy aktywna sieć jest siecią Wi-Fi, i wiem, jak używać interfejsu java.net.NetworkInterface do iterowania dostępnych interfejsów sieciowych i uzyskania ich adresów IP.

To, czego nie wiem, jak to zrobić, to określić, który adres IP należy do sieci Wi-Fi, jeśli znaleziono więcej niż jeden adres. Jakakolwiek rada?

Dzięki.

Odpowiedz

45
public String getIpAddr() { 
    WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 
    WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
    int ip = wifiInfo.getIpAddress(); 

    String ipString = String.format(
    "%d.%d.%d.%d", 
    (ip & 0xff), 
    (ip >> 8 & 0xff), 
    (ip >> 16 & 0xff), 
    (ip >> 24 & 0xff)); 

    return ipString; 
} 

Uwaga: Trzeba dodać android.permission.INTERNET i android.permission.ACCESS_WIFI_STATE w swojej AndroidManifest.xml jak <user-permission/> aby uzyskać dostęp do kodu.

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
+0

To wydaje się działać, dzięki za informacje. –

+0

Cieszę się, że zadziałało !!! –

+0

uprawnienie INTERNET nie jest potrzebne; tylko ACCESS_WIFI_STATE (przynajmniej na 4.1.1) –

3

Proszę spróbować tego kodu.

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

//To fetch the state of the Wi-Fi network in the device 
Boolean isWifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting(); 

WifiManager wifiMgr = (WifiManager) getBaseContext().getSystemService(Context.WIFI_SERVICE); 
WifiInfo wifiInfo = wifiMgr.getConnectionInfo(); 

//To fetch the name of the Wi-Fi network to which the device is connected 
String wifiName = wifiInfo.getSSID(); 
+0

Funkcja ta jest przydatna w to, że daje mi nazwę sieci WiFi, ale to naprawdę nie jest to, czego szukasz. Kiedy wyliczam interfejsy sieciowe, mają one nazwy takie jak "tiwlan0". Muszę powiązać tę nazwę z aktywną siecią. –

1
static final int IP_ADDRESS_LENGTH = 32; 

    public static Integer getSystemWifiIpAddress(Context context) 
    { 
    WifiManager wManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    WifiInfo wInfo = wManager.getConnectionInfo(); 

    int ipAddress = wInfo.getIpAddress(); 
    if (ipAddress == 0) 
     return null; 
    return ipAddress; 
    } 
+0

Jak IP może być int? –