Xamarin.Forms - установить маску подсети WiFi на устройстве Android

Я столкнулся с проблемой, когда мое приложение для Android не может устанавливать исходящие соединения, используя TcpClient класс (вопрос находится здесь). Во время отладки и проведения дальнейших исследований я обнаружил, что мое устройство Android (уровень API 22) получает маску подсети 0.0.0.0 когда он подключается к моей сети 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}

В такой ситуации можно ли вручную изменить маску подсети (или "маску сети") в API Android? Я попытался использовать статическую IP-конфигурацию, как показано здесь, но использование этих параметров устарело на уровне API 17. Я также попытался установить DhcpInfo.Netmask свойство вручную, но требуется int, Я рассчитал один на основе этого ответа, но он был слишком большим и стал uint, Наконец, я просмотрел множество классов, в том числе Android.Net.Wifi.WifiManager, чтобы увидеть, есть ли способ изменить маску сети. Я ничего не нашел, но я мог просто искать не в том месте.

Любая помощь очень ценится!

Обновить:

По соображениям безопасности кажется, что это невозможно с помощью стандартного API Android. Однако способен ли Android NDK изменить маску подсети? Я понимаю, что это обеспечивает доступ к устройству более низкого уровня, и мне не нужно помещать это приложение в магазин приложений (оно предназначено только для моего использования).

1 ответ

По соображениям безопасности ОС Android может не позволить вам сделать это.

Я знаю, как пользователь, я бы не хотел, чтобы приложение изменило мою сетевую конфигурацию.

Кажется, это можно было сделать в прошлом: /questions/26383053/programmnaya-nastrojka-android-ipdnsgateway/26383078#26383078 но этот API устарел / устарел на уровне API 17: https://developer.android.com/reference/android/provider/Settings.System.html

В документах говорится, что вместо этого следует использовать WifiManager, но этот API не позволяет снова менять ip, dns, gateway по соображениям безопасности.

Если вам нужно изменить эти настройки, возможно, вы можете предоставить пользователю страницу с инструкциями, чтобы они могли сами их изменить.

Другие вопросы по тегам