Xamarin.Essentials: OrientationSensor
La classe OrientationSensor consente di monitorare l'orientamento di un dispositivo in uno spazio tridimensionale.
Nota
Questa classe è progettata per determinare l'orientamento di un dispositivo nello spazio 3D. Se è necessario determinare se lo schermo del dispositivo è in modalità verticale o orizzontale, usare la proprietà Orientation
dell'oggetto ScreenMetrics
disponibile dalla classe DeviceDisplay
.
Operazioni preliminari
Per iniziare a usare questa API, leggere la guida introduttiva per Xamarin.Essentials assicurarsi che la libreria sia installata e configurata correttamente nei progetti.
Uso di OrientationSensor
Aggiungere un riferimento a Xamarin.Essentials nella classe :
using Xamarin.Essentials;
OrientationSensor
viene abilitato tramite la chiamata del metodo Start
per monitorare le variazioni dell'orientamento del dispositivo e disabilitato chiamando il metodo Stop
. Le eventuali modifiche vengono inviate tramite l'evento ReadingChanged
. Ecco un esempio di utilizzo:
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.
}
}
}
Le letture di OrientationSensor
vengono restituite in forma di Quaternion
che descrive l'orientamento del dispositivo in base a due sistemi di coordinate 3D:
Il dispositivo (in genere un telefono o tablet) usa un sistema di coordinate 3D con gli assi seguenti:
- L'asse X positivo punta a destra dello schermo in modalità verticale.
- L'asse Y positivo punta alla parte superiore del dispositivo in modalità verticale.
- L'asse Z punta all'esterno dello schermo.
Il sistema di coordinate 3D della terra usa gli assi seguenti:
- L'asse X positivo è tangenziale rispetto alla superficie della terra e punta a est.
- Anche l'asse Y positivo è tangenziale rispetto alla superficie della terra e punta a nord.
- L'asse Z positivo è perpendicolare alla superficie della terra e punta verso l'alto.
Quaternion
descrive la rotazione del sistema di coordinate del dispositivo rispetto al sistema di coordinate della terra.
Un valore Quaternion
è strettamente correlato alla rotazione attorno a un asse. Se un asse di rotazione è il vettore normalizzato (ax, ay, az), e l'angolo di rotazione è Θ, i componenti (X, Y, Z, W) del quaternione sono:
(ax·sin(Θ/2), ay·sin(Θ/2), az·sin(Θ/2), cos(Θ/2))
Questi sono i sistemi di coordinate di destra, quindi con il pollice della mano destra puntato nella direzione positiva dell'asse di rotazione, la curva delle dita indica la direzione di rotazione per gli angoli positivi.
Esempi:
Quando il dispositivo è appoggiato su un piano con lo schermo rivolto verso l'alto, con la parte superiore del dispositivo (in modalità verticale) orientata a nord, i due sistemi di coordinate sono allineati. Il valore
Quaternion
rappresenta il quaternione identità (0, 0, 0, 1). Tutte le rotazioni possono essere analizzate rispetto a questa posizione.Quando il dispositivo è appoggiato su un piano con lo schermo rivolto verso l'alto e la parte superiore del dispositivo (in modalità verticale) è orientata a ovest, il valore di
Quaternion
è (0, 0, 0.707, 0.707). Il dispositivo è stato ruotato di 90 gradi attorno all'asse Z della terra.Quando il dispositivo viene mantenuto in verticale in modo che la parte superiore (in modalità verticale) punti verso il cielo e la parte posteriore del dispositivo sia rivolta verso nord, il dispositivo è stato ruotato di 90 gradi attorno all'asse X. Il valore di
Quaternion
è (0.707, 0, 0, 0.707).Se il dispositivo è posizionato in modo che il bordo sinistro si trova su una tabella e i primi punti a nord, il dispositivo è stato ruotato -90 gradi intorno all'asse Y (o 90 gradi intorno all'asse Y negativo). Il valore di
Quaternion
è (0, -0.707, 0, 0.707).
Velocità del sensore
- Fastest - Ottenere i dati del sensore il più velocemente possibile (non è garantita la restituzione sul thread dell'interfaccia utente).
- Game - Velocità adatta ai giochi (non è garantita la restituzione sul thread dell'interfaccia utente).
- Impostazione predefinita: frequenza predefinita adatta alle modifiche dell'orientamento dello schermo.
- UI - Velocità adatta per l'interfaccia utente generale.
Se non è garantito che il gestore eventi venga eseguito sul thread dell'interfaccia utente e se il gestore eventi deve accedere a elementi dell'interfaccia utente, usare il metodo MainThread.BeginInvokeOnMainThread
per eseguire il codice sul thread dell'interfaccia utente.