【问题标题】:API for configuring static IP addresses in an Android application用于在 Android 应用程序中配置静态 IP 地址的 API
【发布时间】:2011-02-24 17:35:28
【问题描述】:

是否可以在应用程序中设置Android中接口的IP地址?

我可以使用java.net.NetworkInterface 查询可用接口及其当前地址,但这并不能提供更改这些的工具。我只是在某个地方遗漏了什么,还是不允许?

我希望能够让我的应用程序在运行时在“现成”设备上更改或添加一个或多个现有接口的别名。 (2.1/2.2)。理想情况下,我想对IPv4IPv6 地址都这样做。

【问题讨论】:

    标签: android networking ipv6 ipv4


    【解决方案1】:

    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/安全性使您能够连接和使用他们的服务(有点像在未经 ISP 同意的情况下更改有线调制解调器的外部 IP)。

    【讨论】:

    • 很好的答案,谢谢。我认为没有 IPv6 访问权限,也无法添加为别名而不是替换?
    • 我还没有看到任何用于设置 IPv6 地址的 API,唯一的示例使用 IPv4。但是,Android 确实支持 IPv6(Inet6Address 自 API 1 起)。总是可以尝试使用 WIFI_STATIC_IP 设置 IPv6 地址,看看会发生什么:) 也不确定设置别名,抱歉。
    • 这正是我想要的,但是 Android 说“Settings.System.WIFI_STATIC_IP”已被弃用(从 API17 开始),我应该使用 WifiManager,任何新代码或如何链接?
    • 这不再适用于 Android 3.0 或更高版本。底层 Android 实现已更改。
    猜你喜欢
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 2012-11-28
    • 2021-10-15
    • 2022-11-22
    • 2011-05-12
    • 1970-01-01
    相关资源
    最近更新 更多