0

我遇到了一个问题,我的 Android 应用程序无法使用TcpClient该类进行传出连接(问题位于此处)。0.0.0.0在调试和进行进一步研究时,我发现我的 Android 设备(API 级别 22)正在接收连接到我的 WiFi 网络时的子网掩码。我的 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 中手动更改子网掩码(或“网络掩码”)?我曾尝试使用此处所示的静态 IP 配置,但在 API 级别 17 中已弃用这些设置。我也尝试过DhcpInfo.Netmask手动设置该属性,但它需要一个int. 我根据这个答案计算了一个,但它太大了,变成了uint. 最后,我查看了各种类,包括Android.Net.Wifi.WifiManager,看看是否有办法更改网络掩码。我没有找到任何东西,但我可能只是在寻找错误的地方。

任何帮助是极大的赞赏!

更新:

出于安全原因,标准 Android API 似乎无法做到这一点。但是,Android NDK 可以更改子网掩码吗?我知道它提供了对设备的较低级别的访问,我不需要将此应用程序放在应用商店(仅供我使用)。

4

1 回答 1

1

出于安全原因,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、网关。

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

于 2019-01-21T06:50:32.317 回答