private async void ScanButton_OnClicked(object sender, EventArgs e) { scanButton.IsEnabled = false; var scanner = new MobileBarcodeScanner(); Result scanResult = await scanner.Scan(); if (scanResult != null) { await Task.Delay(150); //Have to wait for the scan window to disappear var wifiCreds = WifiCredentials.FromBase40(scanResult.Text); if (wifiCreds?.Ssid != null) { await UserDialogs.Instance.AlertAsync($"Wifi information received - will now attempt to connect to {wifiCreds.Ssid}"); // ReSharper disable once PossibleNullReferenceException var connected = await(Application.Current as App).WifiConnector.ConnectToWifi(wifiCreds); if (connected) { await UserDialogs.Instance.AlertAsync($"Successfully connected to {wifiCreds.Ssid}"); } } } scanButton.IsEnabled = true; }
public async Task <bool> ConnectToWifi(WifiCredentials credentials) { if (credentials == null) { throw new ArgumentNullException(nameof(credentials)); } var tcs = new TaskCompletionSource <bool>(); #pragma warning disable 4014 Task.Run(async() => { try { var wifiConfig = new WifiConfiguration { Ssid = $"\"{credentials.Ssid}\"", PreSharedKey = $"\"{credentials.Pwd}\"" }; WifiManager wifiManager = (WifiManager)_context.GetSystemService(Context.WifiService); // Use ID int netId = wifiManager.AddNetwork(wifiConfig); wifiManager.Disconnect(); await Task.Delay(1000); int disconnectedIp = wifiManager.ConnectionInfo?.IpAddress ?? 0; int currentIp = disconnectedIp; wifiManager.EnableNetwork(netId, true); wifiManager.Reconnect(); for (int i = 0; i < 100; i++) { currentIp = wifiManager.ConnectionInfo?.IpAddress ?? 0; if (currentIp != disconnectedIp) { await Task.Delay(1000); break; } else { await Task.Delay(250); } } tcs.SetResult(currentIp != disconnectedIp); } catch (Exception e) { Debug.WriteLine(e.ToString()); Debugger.Break(); tcs.SetResult(false); } }); #pragma warning restore 4014 return(await tcs.Task); }
/// <summary>Raise an event to request credentials from user</summary> /// <param name="dataModel">The network info data model</param> /// <returns>WifiErrorCode.Success on success, otherwise and error</returns> private WifiErrorCode GetUserCredentials(WifiNetworkInfo dataModel, ref bool save) { save = false; this.log.Info("********************************", "Comm Wrapper - GetUserCredentials"); // TODO - implement. Could also use the wifi GUID WifiCredentials cred = new WifiCredentials() { SSID = dataModel.SSID, RemoteHostName = dataModel.RemoteHostName, RemoteServiceName = dataModel.RemoteServiceName, }; WrapErr.ChkVar(this.CredentialsRequestedEvent, 9999, "No subscribers to CredentialsRequestedEvent"); this.CredentialsRequestedEvent?.Invoke(this, cred); if (cred.IsUserCanceled) { this.log.Info("********************************", "Comm Wrapper - GetUserCredentials Canceled"); return(WifiErrorCode.UserCanceled); } if (cred.SSID.Trim().Length == 0) { this.log.Info("********************************", "Comm Wrapper - GetUserCrendentials Empty SSID"); return(WifiErrorCode.EmptySsid); } else if (cred.RemoteHostName.Trim().Length == 0) { this.log.Info("********************************", "Comm Wrapper - GetUserCrendentials Empty host name"); return(WifiErrorCode.EmptyHostName); } else if (cred.RemoteServiceName.Trim().Length == 0) { this.log.Info("********************************", "Comm Wrapper - GetUserCrendentials Empty port name"); return(WifiErrorCode.EmptyServiceName); } else if (cred.WifiPassword.Trim().Length == 0) { this.log.Info("********************************", "Comm Wrapper - GetUserCrendentials Empty password"); return(WifiErrorCode.EmptyPassword); } this.log.Info("GetUserCredentials", () => string.Format("User request save:{0}", cred.IsUserSaveRequest)); save = cred.IsUserSaveRequest; dataModel.RemoteHostName = cred.RemoteHostName; dataModel.RemoteServiceName = cred.RemoteServiceName; dataModel.Password = cred.WifiPassword; return(WifiErrorCode.Success); }
private void onCredentialsRequested(object sender, WifiCredentials item) { WifiCredResult result = MsgBoxWifiCred.ShowBox(this.parent, item.SSID, item.RemoteHostName, item.RemoteServiceName); if (result.IsChanged) { item.IsUserSaveRequest = true; item.WifiPassword = result.Password; item.IsUserCanceled = false; item.RemoteHostName = result.HostName; item.RemoteServiceName = result.ServiceName; } else { item.IsUserCanceled = true; } }
private void Wifi_CredentialsRequestedEventHandler(object sender, WifiCredentials cred) { var result = MsgBoxWifiCred.ShowBox(this, cred.SSID, cred.RemoteHostName, cred.RemoteServiceName); cred.IsUserCanceled = !result.IsOk; cred.IsUserSaveRequest = result.Save; cred.RemoteHostName = result.HostName; cred.RemoteServiceName = result.ServiceName; cred.WifiPassword = result.Password; //cred.RemoteHostName = "192.168.4.1"; //cred.RemoteServiceName = "80"; //cred.WifiPassword = "******"; // TODO - implement dialog //App.ShowMsg("Returning cred for wifi"); // Not using UserName }
private void GenerateCode_Click(object sender, EventArgs e) { var credentials = new WifiCredentials { Ssid = Ssid.Text.Trim(), Pwd = Password.Text.Trim() }; string base40 = credentials.ToBase40(); using (var generator = new QRCodeGenerator()) using (var codeData = generator.CreateQrCode(base40, QRCodeGenerator.ECCLevel.Q)) using (var qrCode = new QRCode(codeData)) { Bitmap codeImage = qrCode.GetGraphic(20); float resizeScale = Math.Min((float)(QrCodePic.Width - 2) / codeImage.Width, (float)(QrCodePic.Height - 2) / codeImage.Height); Bitmap resized = new Bitmap(QrCodePic.Width, QrCodePic.Height); var graphics = Graphics.FromImage(resized); graphics.FillRectangle(new SolidBrush(Color.White), new RectangleF(0, 0, resized.Width, resized.Height)); graphics.DrawImage(codeImage, ((int)resized.Width - ((int)(codeImage.Width * resizeScale))) / 2, ((int)resized.Height - ((int)(codeImage.Height * resizeScale))) / 2, ((int)(codeImage.Width * resizeScale)), ((int)(codeImage.Height * resizeScale))); QrCodePic.Image = resized; } }