Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.