Android, pobieranie danych o dostępnych access pointach

0

Witam, potrzebuję sposobu na pobranie danych o access pointach znajdujących się w zasięgu urządzenia. Zależy mi na RSSI (jakości sygnału emitowanego przez dany access point) i adresie MAC access pointu (albo innym parametrze który pozwoli mi na rozróżnianie poszczególnych urządzeń). Ten cel próbowałem osiągnąć poprzez zastosowanie klasy Android.Net.Wifi.WifiManager i metody StartScan() która powinna zwrócić interesujące mnie informacje. Z jakiegoś powodu metoda zwraca pustą listę (nie wykrywa żadnych access pointów). Nie wiem czy to kwestia tego, że metoda jest oznaczona jako przestarzała [deprecated] czy jakiegoś błędu w kodzie. Tutaj moje pytanie: czy istnieje jakiś zamiennik dla metody StartScan() i gdzie jest ewentualny błąd w moim kodzie? Z góry dziękuję za podpowiedzi. Poniżej zamieszczam kod w którym wykorzystuję WifiManager.

    class AndroidSignalDetector : ISignalDetector
    {
        readonly Context context;
        readonly WifiManager wifiManager;

        public AndroidSignalDetector()
        {
            context = Android.App.Application.Context.ApplicationContext;
            wifiManager = (WifiManager)context.GetSystemService(Context.WifiService);
            Scan();
           
        }
        public bool IsWifiEnabled()
        {
            if (wifiManager.IsWifiEnabled)
                return true;
            else
                return false;
        }

        private void Scan()
        {
            wifiManager.StartScan();
        }

        public Dictionary<String,int> GetAccessPoints()
        {
            Dictionary<String, int> accessPoints = new Dictionary<string, int>();

            var e = wifiManager.ScanResults.GetEnumerator();
            System.Diagnostics.Debug.WriteLine("Znalezione AP = " + wifiManager.ScanResults.Count); // 0

            while (e.MoveNext()) 
            {
                System.Diagnostics.Debug.WriteLine("" + e.Current.Bssid + " - " + e.Current.Level);
                accessPoints.Add(e.Current.Bssid, e.Current.Level);
            }

            return accessPoints; // Pusta lista
        }
    }   
``` C#
0

Masz dodane uprawnienie ACCESS_FINE_LOCATION oraz CHANGE_WIFI_STATE?

0

Problem rozwiązany. Chodziło o to że dla systemów Android 6.0 i więcej, oprócz dodania uprawnień w AndroidManifest.xml trzeba sprawdzać uprawnienia w trakcie działania aplikacji. Wieloplatformowe sprawdzanie uprawnień zrealizowałem za pomocą NuGetu Plugin.Permissions. Niżej linki do dokumentacji i wątku w którym problem jest poruszony.

https://developer.android.com/guide/topics/permissions/overview

https://developer.android.com/training/permissions/requesting.html

https://stackoverflow.com/questions/39455722/android-wifi-scan-broadcastreceiver-for-scan-results-available-action-not-gett

1 użytkowników online, w tym zalogowanych: 0, gości: 1