2010-05-27 3 views
12

¿Es posible establecer la dirección IP de una interfaz en Android dentro de una aplicación?API para configurar direcciones IP estáticas en una aplicación de Android

Puedo consultar las interfaces disponibles y sus direcciones actuales usando java.net.NetworkInterface, pero esto no ofrece la posibilidad de cambiarlas. ¿Me perdí algo en alguna parte o no está permitido?

Tenía la esperanza de poder hacer que mi aplicación cambie o añada un alias a una o más de las interfaces existentes en tiempo de ejecución en un dispositivo "listo para usar". (2.1/2.2). Idealmente, me gustaría hacer esto para las direcciones IPv4 y IPv6.

Respuesta

16

Settings.System incluye varias banderas que se pueden utilizar para esto:

  • WIFI_USE_STATIC_IP
  • WIFI_STATIC_IP
  • WIFI_STATIC_NETMASK
  • WIFI_STATIC_GATEWAY
  • WIFI_STATIC_DNS1 y WIFI_STATIC_DNS2

También necesitará el permiso android.permission.WRITE_SETTINGS declarado para su aplicación.

Luego, en su actividad:

final ContentResolver cr = getContentResolver(); 
Settings.System.putInt(cr, Settings.System.WIFI_USE_STATIC_IP, 1); 
Settings.System.putString(cr, Settings.System.WIFI_STATIC_IP, "you.re.ip.addr"); 
// call putString() for each value to set for your interface 

Si desea cambiar la dirección IP de la portadora 3G/4G, etc interfaz, no creo que esto es posible - ya que está conectado a la portadora y usa su DHCP/seguridad para permitirle conectarse y usar sus servicios (algo así como cambiar la IP externa de su cablemódem sin el consentimiento de su ISP).

+1

Excelente respuesta, gracias. Supongo que no hay acceso IPv6 a través de esto y no hay forma de agregarlo como alias en lugar de reemplazarlo. – Flexo

+0

No he visto ninguna API para configurar la dirección IPv6, y los únicos ejemplos usan IPv4. Sin embargo, Android admite IPv6 ('Inet6Address' desde API 1). Siempre se puede tratar de configurar una dirección IPv6 con WIFI_STATIC_IP y ver qué sucede :) No estoy seguro sobre la configuración de alias, lo siento. – CrackerJack9

+0

Esto es exactamente lo que quería, sin embargo, Android dice que "Settings.System.WIFI_STATIC_IP" está en desuso (a partir de API17) y debería usar WifiManager, cualquier código nuevo para esto o un enlace de cómo hacerlo. – Shadoath

Cuestiones relacionadas