为Android 3.x和4.x上的Wifi网络分配静态IP地址
我在一个项目上工作,如果用户需要,应该有一个为为Android 3.x和4.x上的Wifi网络分配静态IP地址,android,android-wifi,android-networking,ipv4,Android,Android Wifi,Android Networking,Ipv4,我在一个项目上工作,如果用户需要,应该有一个为Wifi设置静态IP地址(DNS、网络掩码、网关)的功能 我的初始和实际解决方案使用了android.provider.Settings.System类,该类允许此功能,但此解决方案仅适用于android 2.x设备 这很好,当然我并没有完全处于零状态,但如果能让它在更高版本的Android操作系统上也能正常工作,那就太好了。它不知道为什么它不起作用 如果我使用此简单方法检查实际状态: public static final boolean hasS
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
中肯定没有反映出变化,但它没有按预期工作
有没有人面临同样的问题
我很高兴有任何可行的解决方案,也很高兴有根设备(可能是linux中的一些命令),因为很容易检查手机是否有根
提前谢谢。现在我可以说:“我抓到了”
我花了很多天寻找更好、更干净、100%工作的解决方案,看看反射解决方案的实际效果如何(现在我想目前只有一个)。但没有结果
因此,我再次尝试在此处使用上述解决方案:
wifiManager.saveConfiguration();
光打电话是不够的
wifiManager.updateNetwork(wifiConfiguration);
因为更改(也通过反射进行)不会永久保存到特定的WifiConfiguration
因此,现在它可以按预期工作,现在有一个小总结:
为Android 1.x和2.x设置静态IP地址:
Android 1.x和2.x不提供每个SSID设置静态ip地址的解决方案(仅适用于实际连接的网络),因此简单的工作解决方案是使用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地址:
由于安卓3.x可以为每个SSID设置静态ip地址,因此针对低版本安卓操作系统的解决方案将无法工作
目前没有用于此目的的API
,因此上面链接了反射的解决方案是唯一实际可行的解决方案
笔记:
不要忘记更改Android 3.x的setGateway()
最后,如果有人想让应用程序为Android 3.x和4.x设置静态ip地址,那么合适的方法是将网络掩码前缀设置为int,而不完整的网络掩码前缀设置为int
希望能有所帮助。Android L(5.0)预览版对我来说似乎有问题(我只是读取这些值来确定是静态还是DHCP,而不是更改)。如果有人找到Android L解决方案-请共享。wifiManager.saveConfiguration()代码>是一个很好的提示