2010-02-19 14 views
8

Para verificar el acceso a internet en el dispositivo utilizo la función requestRouteToHost, pero su segundo argumento tiene un tipo entero, ¿qué tengo que poner en él? ¿Es una vista interna de IP como lo hace [1] la función? Creo que hay una manera más simple mediante el uso de funciones predeterminadas de Android. ¿Puede alguien decirme?requestRouteToHost argumento IP

[1] ->

public static Long ipToInt(String addr) { 
     String[] addrArray = addr.split("\\."); 

     long num = 0; 
     for (int i=0;i<addrArray.length;i++) { 
      int power = 3-i; 

      num += ((Integer.parseInt(addrArray[i])%256 * Math.pow(256,power))); 
     } 
     return num; 
    } 

Gracias.

Respuesta

9

Si bien hay un método en Android para convertir una dirección IP String en un int, no es parte del SDK. Aquí está la implementación:

public static int lookupHost(String hostname) { 
    InetAddress inetAddress; 
    try { 
     inetAddress = InetAddress.getByName(hostname); 
    } catch (UnknownHostException e) { 
     return -1; 
    } 
    byte[] addrBytes; 
    int addr; 
    addrBytes = inetAddress.getAddress(); 
    addr = ((addrBytes[3] & 0xff) << 24) 
      | ((addrBytes[2] & 0xff) << 16) 
      | ((addrBytes[1] & 0xff) << 8) 
      | (addrBytes[0] & 0xff); 
    return addr; 
} 
+0

¡Esta respuesta es correcta! (+1) Pero, ¿qué pasa con IPv6? – TacB0sS

+1

@ TacB0sS de la documentación de Android Una dirección de protocolo de Internet (IP). Puede ser una dirección IPv4 o una dirección IPv6, y en la práctica tendrá una instancia de Inet4Address o Inet6Address (esta clase no puede crearse una instancia directamente). 'La mayoría del código no necesita distinguir entre las dos familias, y debe usar InetAddress. –

+0

Entonces addrBytes = inetAddress.getAddress(); no devolvería una matriz de 6 bytes? – TacB0sS