我遇到了一个问题,我的Android应用程序无法使用TcpClient
类(位于here的类)建立传出连接。在调试和进行进一步研究时,我发现我的Android设备(API级别22)在连接到我的WiFi网络时收到0.0.0.0
的子网掩码。我的DHCP服务器配置为使用255.255.255.0
,所以我认为这种差异可能是我另一个问题的根源。这是我的代码:
//Connect to the WiFi network
int id = WiFiManager.AddNetwork(new WifiConfiguration()
{
Ssid = $"\"{ssid}\"",
PreSharedKey = $"\"{password}\""
});
WiFiManager.EnableNetwork(id, true);
WiFiManager.Reconnect();
//Retrieve subnet mask (for debugging)
int subnet_mask = WiFiManager.DhcpInfo.Netmask;
subnet_mask
返回0
,DhcpInfo
类的格式化版本显示:
{ipaddr 10.0.0.15 gateway 10.0.0.0 netmask 0.0.0.0 dns1 10.0.0.0 dns2 0.0.0.0 DHCP server
10.0.0.0 lease 43200 seconds}
在这种情况下,有什么方法可以在Android API中手动更改子网掩码(或“ netmask”)?我尝试使用静态IP配置,如图{{ 3}},但是在API级别17中不赞成使用这些设置。我也尝试过手动设置DhcpInfo.Netmask
属性,但是需要使用int
。我根据here计算了一个,但是它太大了,变成了uint
。最后,我查看了包括Android.Net.Wifi.WifiManager
在内的各种类,以查看是否存在更改网络掩码的方法。我什么也没找到,但我可能一直在找错地方。
非常感谢您的帮助!
更新:
出于安全原因,标准的Android API似乎无法做到这一点。 但是,Android NDK能够更改子网掩码吗?我了解它提供了对设备的较低级别的访问权限,并且我不需要将此应用放到应用商店中(这是给我的)只能使用)。
答案 0 :(得分:0)
出于安全原因,Android操作系统可能不允许您执行此操作。
我知道作为用户,我不想让应用程序更改我的网络配置。
过去似乎可以做到这一点:https://stackoverflow.com/a/7142316/2913599 但该API在API级别17中已过时/已弃用:https://developer.android.com/reference/android/provider/Settings.System.html#WIFI_STATIC_DNS1
医生说改用WifiManager,但是出于安全原因,该API不允许再次更改ip,dns,网关。
如果您需要更改这些设置,也许您可以为用户提供说明页,以便他们自己更改。