Sim*_*iak 7 android ipv4 android-networking android-wifi
我在一个项目上工作,应该有一个功能,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;
}
}
Run Code Online (Sandbox Code Playgroud)
它对于Android 2.x和Android 4.x都返回true,但在第二种情况下,更改肯定没有反映在Wifi我发现这是一个小硬编码的解决方案,但它没有按预期工作.
是否有人面临同样的问题?
我会很高兴任何有效的解决方案以及root设备(也许是Linux中的一些命令),因为很容易检查手机是否有根的状态.
提前致谢.
Sim*_*iak 10
现在我可以说:"我抓住了它"
我花了很多天寻找更好,更清洁和100%工作的解决方案,实际(现在我认为目前只有一个解决方案)的解决方案是反射的.但没有结果.
所以我再次尝试使用上面提到的反射解决方案:
而且令人惊讶的是它有效!现在我知道我错过了什么.因此,每个在设备上使用API超过10个(sice Honeycomb)尝试此解决方案的人都要确保打电话:
wifiManager.saveConfiguration();
Run Code Online (Sandbox Code Playgroud)
仅仅打电话是不够的
wifiManager.updateNetwork(wifiConfiguration);
Run Code Online (Sandbox Code Playgroud)
因为更改(也通过反射进行)不会永久保存到特定的WifiConfiguration.
所以现在它按预期工作,现在有点总结:
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
Run Code Online (Sandbox Code Playgroud)
由于Android 3.x可以为每个SSID设置静态IP地址,因此对于较低版本的Android OS的解决方案将无法正常工作.
目前没有API为此目的,因此上面链接的反射解决方案只是实际工作的解决方案.
不要忘记更改setGateway()Android 3.x(也在原始线程中提到)
最后,因为如果有人想要为Android 3.x和4.x设置静态IP地址的应用程序,正确的方法将网络掩码前缀作为int而不是完整的网络掩码,所以这里是可用网络掩码及其前缀的列表.
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
8657 次 |
| 最近记录: |