Xamarin.Essentials: OrientationSensor

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

Not

Bu sınıf, bir cihazın 3D alanda yönünü belirlemek içindir. Cihazın video görüntüsü dikey modda mı yoksa yatay modda mı olduğunu belirlemeniz gerekirse Orientation sınıfından kullanılabilen ScreenMetrics nesnenin özelliğini DeviceDisplay kullanın.

başlarken

Bu API'yi kullanmaya başlamak için kitaplığın projelerinize düzgün bir şekilde yük olduğundan ve ayar olduğundan emin olmak için başlangıç kılavuzunu okuyun.

OrientationSensor Kullanma

sınıfınıza Xamarin.Essentials bir başvuru ekleyin:

using Xamarin.Essentials;

, cihazın yönüne yapılan değişiklikleri izlemek için yöntemi çağrılarak etkinleştirilir ve yöntemi OrientationSensorStart çağrılarak devre dışı Stop bırakılır. Tüm değişiklikler olay aracılığıyla geri ReadingChanged gönderilir. Örnek kullanım şu şekildedir:


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 3D koordinat sistemi temel alarak cihazın yönünü Quaternion açıklayan bir şeklinde geri raporlandı:

Cihazda (genellikle telefon veya tablet) aşağıdaki eksenlere sahip 3D 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 gösterir.
  • Pozitif Z ekseni ekrandan dışarıyı gösterir.

Dünyanın 3D koordinat sistemi aşağıdaki eksenlere sahiptir:

  • Pozitif X ekseni, dünyanın yüzeyine göre tanjdır ve doğuya doğru ilerler.
  • Pozitif Y ekseni de dünyanın yüzeyine göre tanjdır ve kuzeye doğru ilerler.
  • Pozitif Z ekseni, Dünya'nın yüzeyine diktir ve yukarıyı gösterir.

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

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

(x·sin(ı/2),y·sin(ı/2),z·sin(ı/2), cos(×/2))

Bunlar sağ koordinat sistemleridir, bu nedenle sağ elparmak döndürme ekseninin pozitif yönüne işaret ettiği için, parmak eğrisi pozitif açılar için döndürme yönünü gösterir.

Örnekler:

  • Cihaz, ekranı yukarı dönük bir tabloda düz olduğunda ve cihazın üst kısmında (dikey modda) kuzeye işaret ediyorsa, iki koordinat sistemi hizalanır. değer, Quaternion kimlik quaternion'larını (0, 0, 0, 1) temsil eder. Tüm döndürmeler bu konuma göre analiz edilir.

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

  • Cihaz yukarı doğru tutularak üst (dikey modda) buluta doğru hareket eder ve cihazın arka yüzü kuzeye doğru hareket eder ve X ekseninin etrafında 90 derece döndürülür. Değer Quaternion (0,707, 0, 0, 0,707) olur.

  • Cihaz, sol kenarı bir tabloda olacak şekilde ve kuzeyin üst noktaları olacak şekilde konumlandısa, cihaz Y ekseninin etrafında –90 derece (veya negatif Y ekseninin etrafında 90 derece) döndürüldü. Değer Quaternion (0, -0,707, 0, 0,707) olur.

Algılayıcı Hızı

  • En Hızlı – Algılayıcı verilerini mümkün olan en hızlı şekilde elde etmek (kullanıcı arabirimi iş parçacığında geri dönmesi garanti edilemez).
  • Oyun – Oyunlar için uygun hız (kullanıcı arabirimi iş parçacığında geri dönüşü garanti edilemez).
  • Default: Ekran yönlendirme değişiklikleri için varsayılan hız uygundur.
  • UI – Genel kullanıcı arabirimi için uygun hız.

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

API