2010-05-27 70 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

相关问题