2010-05-27 3 views
12

È possibile impostare l'indirizzo IP di un'interfaccia in Android all'interno di un'applicazione?API per la configurazione di indirizzi IP statici in un'applicazione Android

Posso interrogare le interfacce disponibili e i loro indirizzi correnti usando java.net.NetworkInterface, ma questo non fornisce una possibilità di cambiarle. Ho appena perso qualcosa da qualche parte o non è permesso?

Speravo di essere in grado di far cambiare la mia applicazione o aggiungere un alias a una o più interfacce esistenti in fase di esecuzione su un dispositivo "off the shelf". (2.1/2.2). Idealmente mi piacerebbe farlo per entrambi gli indirizzi IPv4 e IPv6.

risposta

16

Settings.System include diversi marcatori che è possibile utilizzare per questo:

  • WIFI_USE_STATIC_IP
  • WIFI_STATIC_IP
  • WIFI_STATIC_NETMASK
  • WIFI_STATIC_GATEWAY
  • WIFI_STATIC_DNS1 e WIFI_STATIC_DNS2

Avrete anche bisogno dell'autorizzazione android.permission.WRITE_SETTINGS dichiarata per la vostra applicazione.

Poi nella vostra attività:

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 

Se si desidera cambiare l'indirizzo IP del vettore 3G/4G, ecc interfaccia, io non credo che questo sia possibile - in quanto è collegato al vettore e usa il loro DHCP/sicurezza per consentire di connettersi e utilizzare i loro servizi (un po 'come cambiare l'IP esterno del modem via cavo senza il consenso del proprio ISP).

+1

Ottima risposta, grazie. Suppongo che non ci sia un accesso IPv6 attraverso questo e nessun modo di aggiungere come alias invece di sostituire? – Flexo

+0

Non ho visto alcuna API per l'impostazione dell'indirizzo IPv6 e gli unici esempi utilizzano IPv4. Tuttavia, Android supporta IPv6 ('Inet6Address' dall'API 1). Potrebbe sempre provare a impostare un indirizzo IPv6 usando WIFI_STATIC_IP e vedere cosa succede :) Non sono sicuro di impostare l'alias, mi spiace. – CrackerJack9

+0

Questo è esattamente quello che volevo, tuttavia Android dice che "Settings.System.WIFI_STATIC_IP" è deprecato (come API17) e dovrei usare WifiManager, qualsiasi nuovo codice per questo o un link per sapere come? – Shadoath

Problemi correlati