Пример #1
0
        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);
            }
        }
Пример #2
0
        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
        }
Пример #3
0
        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;
        }
Пример #6
0
        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);
            }
        }