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