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.