我正在开发一个项目,如果用户想要它,应该有Wifi
设置静态IP地址(DNS,网络掩码,网关)的功能。
我的初始和实际解决方案是允许使用此功能的android.provider.Settings.System
类,但此解决方案仅适用于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
我找到this a little hardcoded solution但是它没有按预期工作。
有没有人面对同样的问题?
我会很高兴任何有效的解决方案以及root设备(可能是Linux中的一些命令),因为很容易检查手机是否有根据的状态。
提前致谢。
答案 0 :(得分:10)
现在我可以说:“我抓住了它”
我花了很多天时间寻找更好,更清洁和100%工作的解决方案,实际(现在我认为目前只有一个解决方案)的解决方案是反射的。但没有结果。
所以我再次尝试在这里使用提到的解决方案:
令人惊讶的是它有效!现在我知道我错过了什么。因此,在API
大于 10 (sice Honeycomb)的设备上尝试此解决方案的所有人都确保您致电:
wifiManager.saveConfiguration();
仅仅打电话
是不够的wifiManager.updateNetwork(wifiConfiguration);
因为更改(也是通过反射进行的)不会永久保存到特定的 WifiConfiguration 。
所以现在它按预期工作,现在有点总结:
Android 1.x和2.x不提供为每个SSID设置静态IP地址的解决方案(仅适用于实际连接的网络),因此简单的工作解决方案是使用 ContentResolver 并将数据写入< strong>系统设置:
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可以为每个SSID设置静态IP地址,因此较低版本的Android操作系统的解决方案将无效。
目前没有API
用于此目的,因此上面链接的反射解决方案只是实际有效的解决方案。
不要忘记为Android 3.x更改setGateway()
(在原始帖子中也提到)
最后因为如果有人想申请为Android 3.x和4.x设置静态IP地址,那么正确的方法需要 netmask前缀为int 和不是完整的网络掩码所以here is list of available netmasks带有前缀。
希望它有所帮助。