2011-11-02 17 views
15

Necesito determinar si el dispositivo Android está conectado a Wifi, y si es así, obtener su dirección IP de Wifi.¿Detecta la dirección IP wifi en Android?

Sé cómo usar ConnectivityManager para determinar si la red activa es una red Wifi, y sé cómo usar java.net.NetworkInterface para iterar sobre las interfaces de red disponibles y obtener sus direcciones IP.

Lo que no sé hacer es determinar qué dirección IP pertenece a la red Wifi, si hay más de una dirección. ¿Algún consejo?

Gracias.

Respuesta

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

Nota: Es necesario añadir android.permission.INTERNET y android.permission.ACCESS_WIFI_STATE en su AndroidManifest.xml como <user-permission/> para acceder al código.

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

Esto parece funcionar, gracias por la información. –

+0

¡Me alegro de que haya funcionado! –

+0

no se necesita el permiso de INTERNET; solo el ACCESS_WIFI_STATE (al menos en 4.1.1) –

3

Por favor, pruebe este código.

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

Esto es útil, ya que me da el nombre de la red Wifi, pero eso no es realmente lo que estaba buscando. Cuando enumero las interfaces de red, tienen nombres como "tiwlan0". Necesito asociar ese nombre con la red activa. –

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

¿Cómo puede una IP ser una int? –