2010-05-27 40 views
12

是否可以在應用程序中設置Android中接口的IP地址?用於在Android應用程序中配置靜態IP地址的API

我可以使用java.net.NetworkInterface來查詢可用的接口和它們的當前地址,但這不能提供更改這些接口的功能。我是否錯過了某個地方,或者不允許?

我一直希望能夠使我的應用程序在「現成」設備上運行時更改或向一個或多個現有接口添加別名。 (2.1/2.2)。理想情況下,我想爲IPv4IPv6地址執行此操作。

回答

16

Settings.System包括幾個標誌,您可以使用此:

  • WIFI_USE_STATIC_IP
  • WIFI_STATIC_IP
  • WIFI_STATIC_NETMASK
  • WIFI_STATIC_GATEWAY
  • WIFI_STATIC_DNS1WIFI_STATIC_DNS2

您還需要爲應用程序聲明的android.permission.WRITE_SETTINGS權限。

然後在您的活動:

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 

如果你想改變運營商的3G/4G等接口的IP地址,我不相信這是可能的 - 因爲它連接到運營商和使用他們的DHCP /安全性來使您能夠連接和使用他們的服務(有點像改變電纜調制解調器的外部IP而未經ISP的同意)。

+1

很好的答案,謝謝。我認爲沒有IPv6通過這個訪問,並且沒有辦法添加作爲別名而不是替換? – Flexo 2011-08-29 16:12:33

+0

我還沒有看到任何設置IPv6地址的API,唯一的例子是使用IPv4。但是,Android確實支持IPv6(API 1以後的'Inet6Address')。可以隨時嘗試使用WIFI_STATIC_IP設置IPv6地址並查看會發生什麼:)不確定是否設置別名,對不起。 – CrackerJack9 2011-08-29 17:03:11

+0

這正是我想要的,然而Android說「Settings.System.WIFI_STATIC_IP」已棄用(API17),我應該使用WifiManager,任何新的代碼或鏈接如何? – Shadoath 2014-04-24 23:04:05

相關問題