Xamarin.Essentials: OrientationSensor

Klasa OrientationSensor umożliwia monitorowanie orientacji urządzenia w trójwymiarowej przestrzeni.

Uwaga

Ta klasa służy do określania orientacji urządzenia w przestrzeni 3D. Jeśli musisz określić, czy ekran wideo urządzenia jest w trybie pionowym lub poziomym, użyj Orientation właściwości ScreenMetrics obiektu dostępnego DeviceDisplay w klasie .

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.

Używanie elementu OrientationSensor

Dodaj odwołanie do Xamarin.Essentials klasy:

using Xamarin.Essentials;

Parametr OrientationSensor jest włączony przez wywołanie Start metody w celu monitorowania zmian orientacji urządzenia i wyłączenia przez wywołanie Stop metody . Wszelkie zmiany są wysyłane z powrotem za pośrednictwem ReadingChanged zdarzenia. Oto przykładowe użycie:


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

    public OrientationSensorTest()
    {
        // Register for reading changes, be sure to unsubscribe when finished
        OrientationSensor.ReadingChanged += OrientationSensor_ReadingChanged;
    }

    void OrientationSensor_ReadingChanged(object sender, OrientationSensorChangedEventArgs e)
    {
        var data = e.Reading;
        Console.WriteLine($"Reading: X: {data.Orientation.X}, Y: {data.Orientation.Y}, Z: {data.Orientation.Z}, W: {data.Orientation.W}");
        // Process Orientation quaternion (X, Y, Z, and W)
    }

    public void ToggleOrientationSensor()
    {
        try
        {
            if (OrientationSensor.IsMonitoring)
                OrientationSensor.Stop();
            else
                OrientationSensor.Start(speed);
        }
        catch (FeatureNotSupportedException fnsEx)
        {
            // Feature not supported on device
        }
        catch (Exception ex)
        {
            // Other error has occurred.
        }
    }
}

OrientationSensor odczyty są zgłaszane z powrotem w postaci Quaternion elementu opisującego orientację urządzenia na podstawie dwóch układów współrzędnych 3D:

Urządzenie (zazwyczaj telefon lub tablet) ma układ współrzędnych 3D z następującymi osiami:

  • Dodatnia oś X wskazuje prawą część ekranu w trybie pionowym.
  • Dodatnia oś Y wskazuje górną część urządzenia w trybie pionowym.
  • Dodatnia oś Z wskazuje na ekran.

Układ współrzędnych 3D Ziemi ma następujące osie:

  • Dodatnia oś X jest tangensem powierzchni Ziemi i punktów na wschód.
  • Dodatnia oś Y jest również tangensem na powierzchni Ziemi i punktów na północ.
  • Dodatnia oś Z jest prostopadła na powierzchnię Ziemi i wskazuje w górę.

Opis Quaternion obrotu układu współrzędnych urządzenia względem układu współrzędnych Ziemi.

Quaternion Wartość jest bardzo ściśle powiązana z rotacją wokół osi. Jeśli oś obrotu jest znormalizowanym wektorem (x,y,z), a kąt obrotu to Θ, wówczas (X, Y, Z, W) składniki kwaternionu to:

(ax·sin(Θ/2),a y·sin(Θ/2),a z·sin(Θ/2), cos(Θ/2))

Są to układy współrzędnych prawej strony, więc z kciukiem prawej ręki skierowanym w kierunku dodatnim osi obrotu krzywa palców wskazuje kierunek obrotu dla kątów dodatnich.

Przykłady:

  • Gdy urządzenie znajduje się płasko na stole z ekranem skierowanym do góry urządzenia (w trybie pionowym) wskazującym na północ, dwa układy współrzędnych są wyrównane. Wartość Quaternion reprezentuje kwaternion tożsamości (0, 0, 0, 0, 1). Wszystkie rotacje można analizować względem tej pozycji.

  • Gdy urządzenie znajduje się płasko na tabeli z ekranem skierowanym w górę, a górna część urządzenia (w trybie pionowym) wskazuje na zachód, Quaternion wartość to (0, 0, 0,707, 0,707). Urządzenie zostało obrócone o 90 stopni wokół osi Z Ziemi.

  • Gdy urządzenie jest trzymane w pionie, tak aby górny (w trybie pionowym) wskazuje na niebo, a tył urządzenia stoi na północ, urządzenie zostało obrócone o 90 stopni wokół osi X. Wartość Quaternion to (0,707, 0, 0, 0,0,707).

  • Jeśli urządzenie jest ustawione tak, aby lewa krawędź znajduje się na tabeli, a górne punkty na północ, urządzenie zostało obrócone –90 stopni wokół osi Y (lub 90 stopni wokół ujemnej osi Y). Wartość Quaternion to (0, -0,707, 0, 0,707).

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.

interfejs API