2010-05-27 11 views
12

Kann die IP-Adresse einer Schnittstelle in Android innerhalb einer Anwendung festgelegt werden?API zum Konfigurieren statischer IP-Adressen in einer Android-Anwendung

Ich kann die verfügbaren Schnittstellen und ihre aktuellen Adressen mit java.net.NetworkInterface abfragen, aber dies bietet keine Möglichkeit, diese zu ändern. Habe ich irgendwo etwas vermisst oder ist das nicht erlaubt?

Ich hoffte in der Lage zu sein, um meine Anwendung entweder ändern oder fügen Sie einen Alias ​​auf eine oder mehrere der vorhandenen Schnittstellen zur Laufzeit auf einem "von der Stange" Gerät. (2.1/2.2). Idealerweise würde ich dies sowohl für IPv4 als auch für IPv6 Adressen tun.

Antwort

16

Settings.System umfasst mehrere Flags, die Sie für diese verwenden:

  • WIFI_USE_STATIC_IP
  • WIFI_STATIC_IP
  • WIFI_STATIC_NETMASK
  • WIFI_STATIC_GATEWAY
  • WIFI_STATIC_DNS1 und WIFI_STATIC_DNS2

Sie benötigen auch die android.permission.WRITE_SETTINGS Berechtigung, die für Ihre Anwendung deklariert wurde.

Dann in Ihrer Aktivität:

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 

Wenn Sie die IP-Adresse des Trägers des 3G/4G, etc. Schnittstelle zu ändern, ich glaube nicht, dass dies möglich ist - wie es mit dem Träger verbunden ist und verwendet ihre DHCP/Sicherheit, um es ihnen zu ermöglichen, ihre Dienste zu verbinden und zu benutzen (so wie die externe IP Ihres Kabelmodems ohne die Zustimmung Ihres ISP zu ändern).

+1

Große Antwort, danke. Ich nehme an, es gibt keinen IPv6-Zugriff durch diese und keine Möglichkeit, als Alias ​​hinzuzufügen, anstatt zu ersetzen? – Flexo

+0

Ich habe keine API zum Einstellen der IPv6-Adresse gesehen, und die einzigen Beispiele verwenden IPv4. Android unterstützt jedoch IPv6 ('Inet6Address' seit API 1). Könnte immer versuchen, eine IPv6-Adresse mit WIFI_STATIC_IP zu setzen und zu sehen, was passiert :) Nicht sicher über die Einstellung Alias, sorry. – CrackerJack9

+0

Dies ist genau das, was ich wollte, aber Android sagt, dass "Settings.System.WIFI_STATIC_IP" veraltet ist (ab API17) und ich sollte WifiManager verwenden, einen neuen Code für diesen oder einen Link für wie? – Shadoath

Verwandte Themen