Xamarin.Essentials: OrientationSensor

OrientationSensor sınıfı, bir cihazın yönlendirmesini üç boyutlu alanda izlemenizi sağlar.

Not

Bu sınıf, bir cihazın 3B alanda yönünü belirlemeye yöneliktir. Cihazın video ekranının dikey mi yoksa yatay modda mı olduğunu belirlemeniz gerekiyorsa, sınıftan kullanılabilen DeviceDisplay nesnenin ScreenMetrics özelliğini kullanınOrientation.

Kullanmaya başlayın

Bu API'yi kullanmaya başlamak için kitaplığın projelerinizde düzgün yüklendiğinden ve ayarlandığından emin olmak için Xamarin.Essentials kullanmaya başlama kılavuzunu okuyun.

OrientationSensor kullanma

Sınıfınızda için Xamarin.Essentials bir başvuru ekleyin:

using Xamarin.Essentials;

OrientationSensor, cihazın yönlendirmesine Start yapılan değişiklikleri izlemek için yöntemini çağırarak etkinleştirilir ve yöntemi çağrılarak Stop devre dışı bırakılır. Tüm değişiklikler olay üzerinden ReadingChanged geri gönderilir. Örnek kullanım aşağıda verilmiştir:


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 okumaları, iki 3B koordinat sistemini temel alarak cihazın yönünü açıklayan bir Quaternion biçiminde geri bildirilir:

Cihazda (genellikle bir telefon veya tablet) aşağıdaki eksenlere sahip bir 3B koordinat sistemi vardır:

  • Pozitif X ekseni dikey modda ekranın sağını gösterir.
  • Pozitif Y ekseni, dikey modda cihazın en üstüne işaret eder.
  • Pozitif Z ekseni ekrandan dışarıyı gösterir.

Dünya'nın 3B koordinat sistemi aşağıdaki eksenlere sahiptir:

  • Pozitif X ekseni Dünya'nın yüzeyine tanjanttır ve doğuya doğru ilerler.
  • Pozitif Y ekseni de Dünya'nın yüzeyine tanjanttır ve kuzeye doğru ilerler.
  • Pozitif Z ekseni Dünya yüzeyine diktir ve yukarı doğru ilerler.

cihazın Quaternion koordinat sisteminin Dünya'nın koordinat sistemine göre dönüşünü açıklar.

Değer Quaternion , eksen etrafında döndürmeyle çok yakından ilgilidir. Döndürme ekseni normalleştirilmiş vektör (x, y,z) ve döndürme açısı Θ ise, quaternion'ın (X, Y, Z, W) bileşenleri şunlardır:

(ax·sin(Θ/2), ay·sin(Θ/2), az·sin(Θ/2), cos(Θ/2))

Bunlar sağ koordinat sistemleridir, bu nedenle sağ elin başparmağı döndürme ekseninin pozitif yönüne işaret edilmişken, parmakların eğrisi pozitif açıların dönüş yönünü gösterir.

Örnekler:

  • Cihaz, ekranı yukarı bakan bir tabloda düz bir şekilde uzandığında, cihazın üst kısmı (dikey modda) kuzeyi işaret ettiğinde, iki koordinat sistemi hizalanır. Quaternion değeri kimlik quaternion'ını (0, 0, 0, 1) temsil eder. Tüm döndürmeler bu konuma göre analiz edilebilir.

  • Cihaz ekranı yukarı bakan bir tabloda düz ve cihazın üst kısmı (dikey modda) batıya Quaternion dönük olduğunda değer (0, 0, 0, 0,707, 0,707) olur. Cihaz Dünya'nın Z ekseni etrafında 90 derece döndürüldü.

  • Cihaz dik tutulduğunda, üst (dikey modda) gökyüzüne doğru işaret ettiğinde ve cihazın arkası kuzeye dönük olduğunda, cihaz X ekseni etrafında 90 derece döndürülür. Değer Quaternion : (0,707, 0, 0, 0,707).

  • Cihaz sol kenarı bir tabloda ve üst noktalar kuzeyde olacak şekilde konumlandırılmışsa, cihaz Y ekseni etrafında –90 derece (veya negatif Y ekseni çevresinde 90 derece) döndürülmüştür. Değer Quaternion : (0, -0,707, 0, 0,707).

Algılayıcı Hızı

  • En hızlı – Sensör verilerini mümkün olan en hızlı şekilde alın (UI iş parçacığında döndürüleceği garanti değildir).
  • Oyun – Oyunlara uygun fiyat (kullanıcı arabirimi iş parçacığında döndürülmesi garanti değildir).
  • Varsayılan – Ekran yönlendirme değişiklikleri için uygun varsayılan hız.
  • Ui – Genel kullanıcı arabirimi için uygun oran.

Olay işleyicinizin kullanıcı arabirimi iş parçacığında çalışması garanti değilse ve olay işleyicisinin kullanıcı arabirimi öğelerine erişmesi gerekiyorsa, ui iş parçacığında bu kodu çalıştırmak için yöntemini kullanın MainThread.BeginInvokeOnMainThread .

API