Hello!
I need to scan the wifi programatically and return a list of all SSID's I get. I've read about it and concluded I can't make it on iOS in a way I can publish the App on the Apple Store(ref).
So, I decided to at least implement it for Android Users, I'm trying to implement via Dependency Service but I'm doing it wrong, here is what I'm doing:
This is the Wifi.cs class in the Android project:
using AirSenseApp.Services; using Android.Content; using Android.Net.Wifi; using System.Collections.Generic; [assembly: Xamarin.Forms.Dependency(typeof(AirSenseApp.Droid.Classes.Wifi))] namespace AirSenseApp.Droid.Classes { public class Wifi:IWifi { private Context context = null; private static WifiManager wifi; private WifiReceiver wifiReceiver; public static List<string> WiFiNetworks; public Wifi(Context ctx) { this.context = ctx; } public void GetWifiNetworks() { WiFiNetworks = new List<string>(); // Get a handle to the Wifi wifi = (WifiManager)context.GetSystemService(Context.WifiService); // Start a scan and register the Broadcast receiver to get the list of Wifi Networks wifiReceiver = new WifiReceiver(); context.RegisterReceiver(wifiReceiver, new IntentFilter(WifiManager.ScanResultsAvailableAction)); wifi.StartScan(); } public class WifiReceiver:BroadcastReceiver { public override void OnReceive(Context context, Intent intent) { IList<ScanResult> scanwifinetworks = wifi.ScanResults; foreach(ScanResult wifinetwork in scanwifinetworks) { WiFiNetworks.Add(wifinetwork.Ssid); } } } } }
This is my Interface that I'm trying to implement on the PCL project:
using System; using System.Collections.Generic; using System.Text; namespace AirSenseApp.Services { public interface IWifi { void GetWifiNetworks(); } }
Is this the correct way to implement it? I tried to put it in my ViewModel this way:
public class CreateDeviceViewModel:INotifyPropertyChanged { private readonly IWifi _wifiService; public CreateDeviceViewModel() { this._wifiService = DependencyService.Get<IWifi>(); } public ScanWifiButtonPressed() { _wifiService.GetWifiNetworks(); } }
But I receive this error:
[0:] System.MissingMethodException: Default constructor not found for type AirSenseApp.Droid.Classes.Wifi
This means I'm not implementing the Wifi.cs in the Android project in the correct way or the problem is in the Interface?