Xamarin.Essentials: OrientationSensor

Třída OrientationSensor umožňuje monitorovat orientaci zařízení v trojrozměrném prostoru.

Poznámka

Tato třída určuje orientaci zařízení ve 3D prostoru. Pokud potřebujete určit, jestli je video na zařízení v režimu na výšku nebo na šířku, použijte vlastnost objektu, který je Orientation k dispozici z třídy ScreenMetricsDeviceDisplay .

Začínáme

Pokud chcete začít používat toto rozhraní API, přečtěte si příručku Začínáme pro a ujistěte se, že je knihovna správně nainstalovaná a nastavená ve vašich projektech.

Použití funkce OrientationSensor

Do třídy Xamarin.Essentials přidejte odkaz na :

using Xamarin.Essentials;

Je povolen voláním metody pro monitorování změn orientace zařízení a zakázáno OrientationSensorStart voláním Stop metody . Všechny změny se posílají zpět prostřednictvím ReadingChanged události. Tady je ukázka použití:


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 Čtení se hlásí zpět ve formě , která popisuje orientaci zařízení na základě Quaternion dvou 3D souřadnicových systémů:

Zařízení (obecně telefon nebo tablet) má 3D souřadnicový systém s následujícími osami:

  • Kladná osa X ukazuje napravo od displeje v režimu na výšku.
  • Kladná osa Y ukazuje na horní část zařízení v režimu na výšku.
  • Kladná osa Z ukazuje z obrazovky.

3D souřadnicový systém Země má následující osy:

  • Kladná osa X je tangens k povrchu Země a ukazuje na východ.
  • Kladná osa Y je také tangens k povrchu Země a ukazuje na sever.
  • Kladná osa Z je kolmá na povrch Země a ukazuje nahoru.

Popisuje otočení souřadnicového systému zařízení vzhledem ke souřadnicovému systému Quaternion Země.

Hodnota Quaternion velmi úzce souvisí s otočením kolem osy. Pokud je osa otočení normalizovaný vektor(x,y,z) a úhel otočení je V, pak jsou komponenty kvaternionu (X, Y, Z, W):

(ax·sin( Z/2), ay·sin( Z/2), az·sin( V/2), cos( V/2))

Jedná se o systémy souřadnic na pravé straně, takže když palce pravé ruky ukazuje na kladný směr osy otočení, křivka palce indikuje směr otáčení kladných úhlů.

Příklady:

  • Když se zařízení nachází plochou na tabulce s obrazovkou směřující nahoru a horní část zařízení (v režimu na výšku) směřuje na sever, jsou oba systémy souřadnic zarovnané. Hodnota Quaternion představuje kvaternion identity (0, 0, 0, 1). Všechny otočení lze analyzovat vzhledem k této pozici.

  • Když se zařízení nachází plochou na tabulce s obrazovkou nahoru a horní část zařízení (v režimu na výšku) ukazuje na západ, hodnota Quaternion je (0, 0, 0,707, 0,707). Kolem osy Z Země se zařízení otáčí o 90 stupňů.

  • Když se zařízení podrží ve svislém směru tak, aby horní část (v režimu na výšku) směřoval k obloze a zadní část zařízení směřuje na sever, bylo zařízení obměněno o 90 stupňů kolem osy X. Hodnota Quaternion je (0,707, 0, 0, 0,707).

  • Pokud je zařízení umístěné tak, aby jeho levý okraj byl na tabulce a horní body na sever, bylo zařízení obměněn – 90 stupňů kolem osy Y (neboli 90 stupňů kolem záporné osy Y). Hodnota Quaternion je (0, -0,707, 0, 0,707).

Rychlost snímače

  • Nejrychlejší – získejte data snímačů co nejrychleji (nezaručuje vrácení ve vlákně uživatelského rozhraní).
  • Game – míra vhodná pro hry (nezaručuje se vrácení ve vlákně uživatelského rozhraní).
  • Výchozí – výchozí rychlost vhodná pro změny orientace obrazovky.
  • Uživatelské rozhraní – rychlost vhodná pro obecné uživatelské rozhraní.

Pokud není zaručeno spuštění obslužné rutiny události ve vlákně uživatelského rozhraní a obslužná rutina události potřebuje přístup k prvkům uživatelského rozhraní, použijte metodu ke spuštění tohoto kódu ve MainThread.BeginInvokeOnMainThread vlákně uživatelského rozhraní.

rozhraní API