public async void ConnectToWifi(string ssid, string password) { if (Android.OS.Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.Q) { var formattedSsid = $"\"{ssid}\""; var formattedPassword = $"\"{password}\""; var wifiConfig = new WifiConfiguration { Ssid = formattedSsid, PreSharedKey = formattedPassword }; var wifiManager = (WifiManager)Android.App.Application.Context .GetSystemService(Context.WifiService); var addNetwork = wifiManager.AddNetwork(wifiConfig); var network = new WifiConfiguration(); IList <Android.Net.Wifi.WifiConfiguration> networks = wifiManager.ConfiguredNetworks.ToList <WifiConfiguration>(); foreach (var n in networks) { Console.WriteLine($"Config Networks: {n.Bssid}"); if (n.Ssid == formattedSsid) { network = n; } } if (network == null) { Console.WriteLine($"Cannot connect to network: {ssid}"); return; } wifiManager.Disconnect(); var enableNetwork = wifiManager.EnableNetwork(network.NetworkId, true); wifiManager.Reconnect(); await Application.Current.MainPage.DisplayAlert("Failed to connect", ssid, "OK"); } else { WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder(); WifiNetworkSpecifier networkSpecifier = builder .SetSsid(ssid) .SetWpa2Passphrase(password) .Build(); NetworkRequest.Builder networkRequest = new NetworkRequest.Builder(); networkRequest .SetNetworkSpecifier(networkSpecifier) .Build(); ConnectivityManager connectivityManager = (ConnectivityManager)Android.App.Application.Context.GetSystemService(Context.ConnectivityService); NetworkCallback networkCallback = new NetworkCallback(connectivityManager); } }
public async Task RequestNetwork(string bssid = null) { WifiNetworkSpecifier specifier; if (bssid != null) { specifier = new WifiNetworkSpecifier.Builder() .SetSsid(Static.Secrets.PreferredWifi) .SetBssid(MacAddress.FromString(bssid)) .SetWpa2Passphrase(Static.Secrets.PrefferedWifiPassword) .Build(); } else { specifier = new WifiNetworkSpecifier.Builder() .SetSsid(Static.Secrets.PreferredWifi) .SetWpa2Passphrase(Static.Secrets.PrefferedWifiPassword) .Build(); } var request = new NetworkRequest.Builder() .AddTransportType(TransportType.Wifi) .AddCapability(NetCapability.NotRestricted) .SetNetworkSpecifier(specifier) .Build(); if (_requested) { _connectivityManager.UnregisterNetworkCallback(_callback); } _connectivityManager.RequestNetwork(request, _callback, 15000); _requested = true; DateTime startedAt = DateTime.Now; while (!Static.RuntimeSettings.IsWifiRequestingFinished) { //wait for any action from the user //but if we hit 15s of timeout, stop if ((DateTime.Now - startedAt).TotalSeconds >= 15) { break; } } Static.RuntimeSettings.IsWifiRequestingFinished = false; // <== reset value }
public async void Connect1(string _ssid, string _pwd) { var specifier = new WifiNetworkSpecifier.Builder() .SetSsid(_ssid) .SetWpa2Passphrase(_pwd) .Build(); var request = new NetworkRequest.Builder() .AddTransportType(TransportType.Wifi) // we want WiFi .RemoveCapability(NetCapability.Internet) // Internet not required .SetNetworkSpecifier(specifier) // we want _our_ network .Build(); NetworkCallback _callback = new NetworkCallback(_wifiManager); _wifiManager.RequestNetwork(request, _callback); }
private void DoConnection(WifiNetworkInfo dataModel) { if (!this.GetWifiManager().IsWifiEnabled) { this.RaiseError(WifiErrorCode.NoAdapters); return; } this.Disconnect(); int port; if (!int.TryParse(dataModel.RemoteServiceName, out port)) { this.RaiseError(WifiErrorCode.NonNumericPort); return; } // TODO - need check the host name length WifiNetworkSpecifier specifier = new WifiNetworkSpecifier.Builder(). SetSsid(dataModel.SSID). SetWpa2Passphrase(dataModel.Password). Build(); NetworkRequest request = new NetworkRequest.Builder() .AddTransportType(TransportType.Wifi) .RemoveCapability(NetCapability.Internet) // Internet not required .SetNetworkSpecifier(specifier) // we want _our_ network .Build(); ConnectivityManager cm = this.GetConnectivityManager(); this.connectCallback = new WifiAndroidConnectCallback(cm, dataModel.RemoteHostName, port) { NetworkAvailable = this.OnNetworkAvailable, NetworkUnavailable = this.OnNetworkUnavailable }; cm.RequestNetwork(request, this.connectCallback); }
private void RequestNetwork() { var specifier = new WifiNetworkSpecifier.Builder() .SetSsid(_ssid.Text) .SetWpa2Passphrase(_passphrase.Text) .Build(); var request = new NetworkRequest.Builder() .AddTransportType(TransportType.Wifi) .SetNetworkSpecifier(specifier) .Build(); var connectivityManager = GetSystemService(ConnectivityService) as ConnectivityManager; if (_requested) { connectivityManager.UnregisterNetworkCallback(_callback); } connectivityManager.RequestNetwork(request, _callback); _requested = true; }
public bool ConnectToWifi(string ssid, string password) { try { if (Android.OS.Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.Q) { _WifiManager = (WifiManager)Android.App.Application.Context.GetSystemService(Context.WifiService); string oldSsid = "empty"; string oldBsid = "empty"; try { oldSsid = _WifiManager.ConnectionInfo.SSID.Replace("\"", ""); oldBsid = _WifiManager.ConnectionInfo.BSSID.Replace("\"", ""); } catch { } var formattedSsid = $"\"{ssid}\""; var formattedPassword = $"\"{password}\""; var wifiConfig = new WifiConfiguration { Ssid = formattedSsid, PreSharedKey = formattedPassword }; _WifiManager.AddNetwork(wifiConfig); var dis = _WifiManager.Disconnect(); var network = _WifiManager.ConfiguredNetworks.FirstOrDefault(n => n.Ssid.Contains(formattedSsid)); var ena = _WifiManager.EnableNetwork(network.NetworkId, true); var req = _WifiManager.Reconnect(); _Status = "api<29, connecting to " + formattedSsid + " from " + oldSsid + ", dis = " + dis + " ena = " + ena + " req = " + req; Android.Util.Log.Debug("TEST", _Status); } else { NetworkSpecifier specifier = new WifiNetworkSpecifier.Builder() .SetSsidPattern(new PatternMatcher(ssid, Pattern.Prefix)) .SetBssidPattern(MacAddress.FromString(password), MacAddress.FromString("ff:ff:ff:ff:ff:ff")) .Build(); NetworkRequest request = new NetworkRequest.Builder() .AddTransportType(TransportType.Wifi) .RemoveCapability(NetCapability.Internet) .SetNetworkSpecifier(specifier) .Build(); _ConnectivityManager = (ConnectivityManager)Android.App.Application.Context.GetSystemService(Context.ConnectivityService); _NetworkCallback = new WifiNetworkCallback(); _Status = "api>=29, connecting to " + ssid + " mac " + password; Android.Util.Log.Debug("TEST", _Status); _ConnectivityManager.RequestNetwork(request, _NetworkCallback); } return(true); } catch (Exception ex) { _Status = "Connect to WiFi error, ex=" + ex.Message; Android.Util.Log.Error("TEST", _Status); return(false); } }