Udostępnij za pośrednictwem


Xamarin.Essentials:Kompas

Klasa Compass umożliwia monitorowanie magnetycznego nagłówka urządzenia na północ.

Rozpocznij

Aby rozpocząć korzystanie z tego interfejsu API, przeczytaj przewodnik wprowadzający , Xamarin.Essentials aby upewnić się, że biblioteka jest prawidłowo zainstalowana i skonfigurowana w projektach.

Korzystanie z kompasu

Dodaj odwołanie do Xamarin.Essentials klasy:

using Xamarin.Essentials;

Funkcje Compass działają przez wywołanie Start metod i Stop w celu nasłuchiwania zmian w kompasie. Wszelkie zmiany są wysyłane z powrotem za pośrednictwem ReadingChanged zdarzenia. Oto przykład:

public class CompassTest
{
    // Set speed delay for monitoring changes.
    SensorSpeed speed = SensorSpeed.UI;

    public CompassTest()
    {
        // Register for reading changes, be sure to unsubscribe when finished
        Compass.ReadingChanged += Compass_ReadingChanged;
    }

    void Compass_ReadingChanged(object sender, CompassChangedEventArgs e)
    {
        var data = e.Reading;
        Console.WriteLine($"Reading: {data.HeadingMagneticNorth} degrees");
        // Process Heading Magnetic North
    }

    public void ToggleCompass()
    {
        try
        {
            if (Compass.IsMonitoring)
              Compass.Stop();
            else
              Compass.Start(speed);
        }
        catch (FeatureNotSupportedException fnsEx)
        {
            // Feature not supported on device
        }
        catch (Exception ex)
        {
            // Some other exception has occurred
        }
    }
}

Szybkość czujnika

  • Najszybsze — jak najszybciej pobierz dane czujnika (nie ma gwarancji powrotu do wątku interfejsu użytkownika).
  • Gra — stawka odpowiednia dla gier (nie ma gwarancji powrotu do wątku interfejsu użytkownika).
  • Ustawienie domyślne — częstotliwość domyślna odpowiednia dla zmian orientacji ekranu.
  • Interfejs użytkownika — szybkość odpowiednia dla ogólnego interfejsu użytkownika.

Jeśli program obsługi zdarzeń nie ma gwarancji, że zostanie uruchomiony w wątku interfejsu użytkownika, a program obsługi zdarzeń musi uzyskać dostęp do elementów interfejsu użytkownika, użyj MainThread.BeginInvokeOnMainThread metody , aby uruchomić ten kod w wątku interfejsu użytkownika.

Specyfika implementacji platformy

System Android nie udostępnia interfejsu API do pobierania nagłówka kompasu. Używamy akcelerometru i magnetometru do obliczenia magnetycznego nagłówka północy, który jest zalecany przez Google.

W rzadkich przypadkach można zobaczyć niespójne wyniki, ponieważ czujniki muszą być skalibrowane, co obejmuje przeniesienie urządzenia w ruchu rysunek-8. Najlepszym sposobem na to jest otwarcie map Google, naciśnięcie kropki dla twojej lokalizacji i wybranie pozycji Skalibrowanie kompasu.

Uruchomienie wielu czujników z aplikacji w tym samym czasie może dostosować szybkość czujnika.

Filtr z niskim przekazywaniem

Ze względu na sposób aktualizowania wartości kompasu dla systemu Android i obliczania może być konieczne złagodzenie wartości. Filtr niskich przejść można zastosować, aby średnią sinus i cosinus wartości kątów i można je włączyć przy użyciu Start przeciążenia metody, które akceptuje bool applyLowPassFilter parametr:

Compass.Start(SensorSpeed.UI, applyLowPassFilter: true);

Jest to stosowane tylko na platformie Android, a parametr jest ignorowany w systemach iOS i UWP. Więcej informacji można znaleźć tutaj.

interfejs API

Więcej filmów na platformie Xamarin można znaleźć w witrynach Channel 9 i YouTube.