private async Task RunWifiScan() { await _wifiScanner.ScanForNetworks(); WiFiNetworkReport report = _wifiScanner.WiFiAdapter.NetworkReport; Geolocator geolocator = new Geolocator() { DesiredAccuracy = PositionAccuracy.High }; Geoposition position = await geolocator.GetGeopositionAsync(); var locationWifiGpsData = new WifiGpsDetail() { Accuracy = position.Coordinate.Accuracy, Altitude = position.Coordinate.Point.Position.Altitude, LocationStatus = geolocator.LocationStatus, Latitude = position.Coordinate.Point.Position.Latitude, Longitude = position.Coordinate.Point.Position.Longitude, TimeStamp = position.Coordinate.Timestamp }; foreach (var availableNetwork in report.AvailableNetworks) { WifiSignal wifiSignal = new WifiSignal() { BeaconInterval = availableNetwork.BeaconInterval, Bssid = availableNetwork.Bssid, ChannelCenterFrequencyInKilohertz = availableNetwork.ChannelCenterFrequencyInKilohertz, IsWiFiDirect = availableNetwork.IsWiFiDirect, NetworkKind = availableNetwork.NetworkKind.ToString(), NetworkRssiInDecibelMilliwatts = availableNetwork.NetworkRssiInDecibelMilliwatts, PhyKind = availableNetwork.PhyKind.ToString(), SecuritySettings = availableNetwork.SecuritySettings.NetworkEncryptionType.ToString(), SignalBars = availableNetwork.SignalBars, Ssid = availableNetwork.Ssid, Uptime = availableNetwork.Uptime, VenueName = VenueName, ScanTime = _wifiScanner.scanTime }; AddWifiScanResultsToWifiScannerDatabase(wifiSignal, locationWifiGpsData); } }
private void AddWifiScanResultsToWifiScannerDatabase(WifiSignal wifiSignal, WifiGpsDetail gpsSignal) { using (SqliteConnection database = new SqliteConnection("Filename = WiFiScanner.db")) { database.Open(); //create if table doesn't exist CreateVenueTableInWifiScannerDatabaseIfNotExists(RemoveWhiteSpace(VenueName)); //check if VenueName / Bssid / Ssid exists already using (SqliteCommand sqlCheckExistingWifiSignalCommand = new SqliteCommand()) { sqlCheckExistingWifiSignalCommand.Connection = database; sqlCheckExistingWifiSignalCommand.CommandText = "SELECT count(*) FROM " + RemoveWhiteSpace(VenueName) + " " + "WHERE VenueName = @VenueName " + "AND Bssid = @Bssid " + "AND Ssid = @Ssid"; sqlCheckExistingWifiSignalCommand.Parameters.AddWithValue("@VenueName", wifiSignal.VenueName); //string TEXT sqlCheckExistingWifiSignalCommand.Parameters.AddWithValue("@Bssid", wifiSignal.Bssid); //string TEXT sqlCheckExistingWifiSignalCommand.Parameters.AddWithValue("@Ssid", wifiSignal.Ssid); //string TEXT int count = Convert.ToInt32(sqlCheckExistingWifiSignalCommand.ExecuteScalar()); //check for existing record if (count == 0) { using (SqliteCommand insertCommand = new SqliteCommand()) { insertCommand.Connection = database; insertCommand.CommandText = "INSERT INTO " + RemoveWhiteSpace(VenueName) + " " + "(" + //"BeaconInterval, " + "Bssid, " + //"ChannelCenterFrequencyInKilohertz, " + //"IsWiFiDirect, " + //"NetworkKind, " + "NetworkRssiInDecibelMilliwatts, " + //"PhyKind, " + //"SecuritySettings, " + //"SignalBars, " + "Ssid, " + "Uptime, " + "ScanCount, " + "VenueName, " + "ScanTime, " + "Accuracy, " + "Altitude, " + "LocationStatus, " + "Latitude, " + "Longitude, " + "TimeStamp" + ")" + "VALUES " + "(" + //"@BeaconInterval," + "@Bssid," + //"@ChannelCenterFrequencyInKilohertz," + //"@IsWiFiDirect," + //"@NetworkKind," + "@NetworkRssiInDecibelMilliwatts," + //"@PhyKind," + //"@SecuritySettings," + //"@SignalBars," + "@Ssid," + "@Uptime," + "@ScanCount, " + "@VenueName," + "@ScanTime," + "@Accuracy," + "@Altitude," + "@LocationStatus," + "@Latitude," + "@Longitude," + "@TimeStamp" + ")"; ////insertCommand.Parameters.AddWithValue("@BeaconInterval", wifiSignal.BeaconInterval.Ticks); //long INTEGER insertCommand.Parameters.AddWithValue("@Bssid", wifiSignal.Bssid); //string TEXT //insertCommand.Parameters.AddWithValue("@ChannelCenterFrequencyInKilohertz", wifiSignal.ChannelCenterFrequencyInKilohertz); //double REAL //insertCommand.Parameters.AddWithValue("@IsWiFiDirect", (wifiSignal.IsWiFiDirect) ? 1 : 0); //bool INTEGER //insertCommand.Parameters.AddWithValue("@NetworkKind", wifiSignal.NetworkKind); //string TEXT insertCommand.Parameters.AddWithValue("@NetworkRssiInDecibelMilliwatts", wifiSignal.NetworkRssiInDecibelMilliwatts); //double REAL //insertCommand.Parameters.AddWithValue("@PhyKind", wifiSignal.PhyKind); //string TEXT //insertCommand.Parameters.AddWithValue("@SecuritySettings", wifiSignal.SecuritySettings); //string TEXT //insertCommand.Parameters.AddWithValue("@SignalBars", wifiSignal.SignalBars); //byte INTEGER insertCommand.Parameters.AddWithValue("@Ssid", wifiSignal.Ssid); //string TEXT insertCommand.Parameters.AddWithValue("@Uptime", wifiSignal.Uptime.Ticks); //long INTEGER insertCommand.Parameters.AddWithValue("@ScanCount", (long)count); //long INTEGER insertCommand.Parameters.AddWithValue("@VenueName", wifiSignal.VenueName); //string TEXT insertCommand.Parameters.AddWithValue("@ScanTime", wifiSignal.ScanTime.ToString("yyyy-MM-dd HH:mm")); //string TEXT insertCommand.Parameters.AddWithValue("@Accuracy", gpsSignal.Accuracy); //double REAL insertCommand.Parameters.AddWithValue("@Altitude", gpsSignal.Altitude); //double REAL insertCommand.Parameters.AddWithValue("@LocationStatus", gpsSignal.GetLocationStatus()); //string TEXT insertCommand.Parameters.AddWithValue("@Latitude", gpsSignal.Latitude); //double REAL insertCommand.Parameters.AddWithValue("@Longitude", gpsSignal.Longitude); //double REAL insertCommand.Parameters.AddWithValue("@TimeStamp", gpsSignal.TimeStamp.ToString("yyyy-MM-dd HH:mm:ss.fff")); //string TEXT try { insertCommand.ExecuteNonQuery(); } catch (SqliteException e) { throw new Exception("SQL table INSERT not performed" + count.ToString()); } } } database.Close(); database.Dispose(); } Output.ItemsSource = ReadWifiScannerDatabase; } }