Xamarin.Forms - установить маску подсети WiFi на устройстве Android - PullRequest
0 голосов
/ 20 января 2019

Я столкнулся с проблемой, из-за которой мое приложение для 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-конфигурацию, как показано здесь , но использовать эти настройкиустарел на уровне 17 API. Я также пытался установить свойство DhcpInfo.Netmask вручную, но это занимает int.Я рассчитал один на основе этого ответа , но он был слишком большим и стал uint.Наконец, я просмотрел множество классов, в том числе Android.Net.Wifi.WifiManager, чтобы узнать, есть ли способ изменить маску сети.Я ничего не нашел, но, возможно, я просто искал не в тех местах.

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

Обновление:

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

1 Ответ

0 голосов
/ 21 января 2019

По соображениям безопасности ОС 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, gateway из соображений безопасности.

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

...