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
Powiązany film wideo
Więcej filmów na platformie Xamarin można znaleźć w witrynach Channel 9 i YouTube.