Bagikan melalui


Xamarin.Essentials: OrientationSensor

Kelas OrientationSensor memungkinkan Anda memantau orientasi perangkat dalam ruang tiga dimensi.

Catatan

Kelas ini untuk menentukan orientasi perangkat dalam ruang 3D. Jika Anda perlu menentukan apakah tampilan video perangkat dalam mode potret atau lanskap, gunakan Orientation properti objek yang ScreenMetrics tersedia dari DeviceDisplay kelas .

Memulai

Untuk mulai menggunakan API ini, baca panduan memulai untuk Xamarin.Essentials memastikan pustaka diinstal dan disiapkan dengan benar di proyek Anda.

Menggunakan OrientationSensor

Tambahkan referensi ke Xamarin.Essentials di kelas Anda:

using Xamarin.Essentials;

OrientationSensor diaktifkan dengan memanggil Start metode untuk memantau perubahan pada orientasi perangkat, dan dinonaktifkan dengan memanggil Stop metode . Setiap perubahan dikirim kembali melalui ReadingChanged peristiwa. Berikut adalah contoh penggunaan:


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 pembacaan dilaporkan kembali dalam bentuk Quaternion yang menjelaskan orientasi perangkat berdasarkan dua sistem koordinat 3D:

Perangkat (umumnya ponsel atau tablet) memiliki sistem koordinat 3D dengan sumbu berikut:

  • Sumbu X positif menunjuk ke kanan tampilan dalam mode potret.
  • Sumbu Y positif menunjuk ke bagian atas perangkat dalam mode potret.
  • Sumbu Z positif menunjuk keluar dari layar.

Sistem koordinat 3D Bumi memiliki sumbu berikut:

  • Sumbu X positif bersinggungan dengan permukaan Bumi dan titik timur.
  • Sumbu Y positif juga bersinggungan dengan permukaan Bumi dan titik utara.
  • Sumbu Z positif tegak lurus dengan permukaan Bumi dan menunjuk ke atas.

Menjelaskan Quaternion rotasi sistem koordinat perangkat relatif terhadap sistem koordinat Bumi.

Nilai Quaternion sangat terkait erat dengan rotasi di sekitar sumbu. Jika sumbu rotasi adalah vektor yang dinormalisasi (x,y, z), dan sudut rotasi adalah Θ, komponen (X, Y, Z, W) dari quaternion adalah:

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

Ini adalah sistem koordinat tangan kanan, jadi dengan jempol tangan kanan menunjuk ke arah positif sumbu rotasi, kurva jari menunjukkan arah rotasi untuk sudut positif.

Contoh:

  • Ketika perangkat terletak datar di atas meja dengan layar menghadap ke atas, dengan bagian atas perangkat (dalam mode potret) menunjuk ke utara, kedua sistem koordinat selaras. Nilai Quaternion mewakili kuaternion identitas (0, 0, 0, 1). Semua rotasi dapat dianalisis relatif terhadap posisi ini.

  • Ketika perangkat terletak datar di atas tabel dengan layar menghadap ke atas, dan bagian atas perangkat (dalam mode potret) menunjuk ke Quaternion barat, nilainya adalah (0, 0, 0,707, 0,707). Perangkat telah diputar 90 derajat di sekitar sumbu Z Bumi.

  • Ketika perangkat dipegang tegak sehingga bagian atas (dalam mode potret) menunjuk ke langit, dan bagian belakang perangkat menghadap ke utara, perangkat telah diputar 90 derajat di sekitar sumbu X. Nilainya Quaternion adalah (0,707, 0, 0, 0,707).

  • Jika perangkat diposisikan sehingga tepi kirinya berada di atas meja, dan titik atas utara, perangkat telah diputar –90 derajat di sekitar sumbu Y (atau 90 derajat di sekitar sumbu Y negatif). Nilainya Quaternion adalah (0, -0,707, 0, 0,707).

Kecepatan Sensor

  • Tercepat - Dapatkan data sensor secepat mungkin (tidak dijamin akan kembali pada utas UI).
  • Game – Rate cocok untuk game (tidak dijamin akan kembali pada utas UI).
  • Default – Laju default yang cocok untuk perubahan orientasi layar.
  • UI – Laju yang cocok untuk antarmuka pengguna umum.

Jika penanganan aktivitas Anda tidak dijamin berjalan pada utas UI, dan jika penanganan aktivitas perlu mengakses elemen antarmuka pengguna, gunakan MainThread.BeginInvokeOnMainThread metode untuk menjalankan kode tersebut pada utas UI.

API