在Android 3.x和4.x上为Wifinetworking分配静态IP地址

我工作的一个项目,应该有一个function,如果用户需要设置静态IP地址(DNS,networking掩码,网关)的Wifi

我最初的和实际的解决scheme是使用android.provider.Settings.System类,它允许这个function,但是这个解决scheme只适用于Android 2.x设备。

这很好,当然,我不完全是零,但它会很好,也适用于更高版本的Android操作系统。 它不知道为什么它不起作用。

如果我使用这个简单的方法来检查实际状态:

 public static final boolean hasStaticIp(Context c) { try { return Settings.System.getInt(c.getContentResolver(), Settings.System.WIFI_USE_STATIC_IP) == 1; } catch (SettingNotFoundException e) { Log.i(TAG, "Settings not found (" + e.geMessage() + ")"); return false; } } 

它对于Android 2.x和Android 4.x都会返回true,但是在第二种情况下,更改肯定不会反映在Wifi我发现这是一个小小的硬编码解决scheme,但没有像预期的那样工作。

有没有人面对同样的问题?

我会很高兴任何工作的解决scheme,也为根植的设备(也许一些命令在Linux),因为它很容易检查手机是否根源的状态。

提前致谢。

Solutions Collecting From Web of "在Android 3.x和4.x上为Wifinetworking分配静态IP地址"

现在我可以说: “我抓到了”

我花了很多天寻找更好,更清洁,100%的工作解决scheme如何实际(现在我猜目前只有一个解决scheme)与反思的解决scheme是。 但没有结果。

所以我再次尝试用reflection在这里提到的解决scheme:

  • 如何以编程方式在Android 3.x或4.x上configuration静态IP,networking掩码,网关

令人惊讶的是它的工作原理! 而现在我知道我错过了什么。 所以每个在API大于10 (sice Honeycomb)的设备上尝试这个解决scheme的人都要确保你调用了:

 wifiManager.saveConfiguration(); 

仅拨打电话是不够的

 wifiManager.updateNetwork(wifiConfiguration); 

因为更改(也是通过reflection)将不会永久保存到特定的Wificonfiguration

所以现在它按预期工作,现在有一点总结:

为Android 1.x和2.x设置静态IP地址:

Android 1.x和2.x不提供设置每个SSID的静态IP地址(仅用于实际连接的networking)的解决scheme,所以简单的工作解决scheme是使用ContentResolver并通过以下方式将数据写入系统设置

 Settings.System.putInt(resolver, "wifi_use_static_ip", 1); // enabling static ip Settings.System.putInt(resolver, "wifi_use_static_ip", 0); // enabling DHCP 

为Android 3.x和4.x设置静态IP地址:

从Android 3.x开始,可以为每个SSID设置静态IP地址,因此对于较低版本的Android OS的解决scheme将不起作用。

目前没有用于此目的的API ,因此上面链接的reflection解决scheme只是实际工作的一个。

笔记:

不要忘记更改为Android 3.x setGateway() (也在原始线程中提到)

最后,如果有人想要为Android 3.x和4.x设置静态IP地址的应用程序适当的方法将networking掩码前缀作为整数,不是完整的networking掩码,所以这里是可用的networking掩码及其前缀的列表 。

希望能帮助到你。