2011-11-02 121 views
15

我需要確定Android設備是否連接到Wifi,如果是,請獲取其Wifi IP地址。在Android上檢測wifi的IP地址?

我知道如何使用ConnectivityManager來確定活動網絡是否爲Wifi網絡,並且我知道如何使用java.net.NetworkInterface遍歷可用網絡接口並獲取其IP地址。

我不知道該怎麼做是確定哪個IP地址屬於Wifi網絡,如果有多個地址找到的話。有什麼建議?

謝謝。

回答

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; 
} 

請注意:您需要在您的AndroidManifest.xml添加android.permission.INTERNETandroid.permission.ACCESS_WIFI_STATE<user-permission/>訪問代碼。

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

這似乎工作,感謝信息。 –

+0

很高興它工作! –

+0

不需要INTERNET權限;只是ACCESS_WIFI_STATE(至少在4.1.1) –

3

請嘗試此驗證碼。

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

這是因爲它給我的Wifi網絡的名稱是有用的,但是這不是真的是我一直在尋找。當我列舉網絡接口時,他們有諸如「tiwlan0」的名稱。我需要將該名稱與活動網絡相關聯。 –

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

IP如何成爲int? –