Xamarin.Forms-在Android设备上设置WiFi子网掩码

时间:2019-01-20 02:50:04

标签: android xamarin.forms dhcp subnet netmask

我遇到了一个问题,我的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返回0DhcpInfo类的格式化版本显示:

{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能够更改子网掩码吗?我了解它提供了对设备的较低级别的访问权限,并且我不需要将此应用放到应用商店中(这是给我的)只能使用)。

1 个答案:

答案 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,网关。

如果您需要更改这些设置,也许您可​​以为用户提供说明页,以便他们自己更改。