Xamarin.Essentials: OrientationSensor

La clase OrientationSensor permite supervisar la orientación de un dispositivo en un espacio tridimensional.

Nota:

Esta clase se usa para determinar la orientación de un dispositivo en un espacio tridimensional. Si tiene que determinar si la visualización de vídeo del dispositivo está en modo vertical u horizontal, use la propiedad Orientation del objeto ScreenMetrics disponible en la clase DeviceDisplay.

Introducción

Para empezar a usar esta API, lea la guía de introducción para Xamarin.Essentials con el fin de asegurarse de que la biblioteca está correctamente instalada y configurada en los proyectos.

Uso de OrientationSensor

Agregue una referencia a Xamarin.Essentials en la clase:

using Xamarin.Essentials;

OrientationSensor se habilita mediante una llamada al método Start para supervisar los cambios en la orientación del dispositivo y se deshabilita al llamar al método Stop. Los cambios se enviarán a través del evento ReadingChanged. Este es un uso de ejemplo:


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.
        }
    }
}

Las lecturas de OrientationSensor se informan como un Quaternion que describe la orientación del dispositivo en función de dos sistemas de coordenadas tridimensionales:

El dispositivo (generalmente un teléfono o tableta) tiene un sistema de coordenadas tridimensional con los siguientes ejes:

  • El eje X positivo apunta a la derecha de la visualización en modo vertical.
  • El eje Y positivo apunta a la parte de arriba del dispositivo en modo horizontal.
  • El eje Z positivo apunta fuera de la pantalla.

El sistema de coordenadas tridimensional de la Tierra tiene estos ejes:

  • El eje X positivo es tangente a la superficie de la Tierra y apunta al este.
  • El eje Y positivo también es tangente a la superficie de la Tierra y apunta al norte.
  • El eje Z positivo es perpendicular a la superficie de la Tierra y apunta hacia arriba.

Quaternion describe la rotación del sistema de coordenadas del dispositivo en relación con el sistema de coordenadas de la Tierra.

Un valor Quaternion está estrechamente relacionado con la rotación alrededor de un eje. Si un eje de rotación es el vector normalizado (ax, ay, az) y el ángulo de rotación es Θ, los componentes (X, Y, Z, W) del cuaternión son:

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

Estos son los sistemas de coordenadas de la derecha por lo que, con el pulgar de la mano derecha apuntando en la dirección positiva del eje de rotación, la curva de los dedos indica la dirección de la rotación de los ángulos positivos.

Ejemplos:

  • Cuando el dispositivo está pantalla arriba sobre una mesa, con la parte superior del mismo (en el modo vertical) apuntando al norte, los dos sistemas de coordenadas están alineados. El valor Quaternion representa el cuaternión de identidad (0, 0, 0, 1). Todas las rotaciones se pueden analizar en relación con esta posición.

  • Cuando el dispositivo está pantalla arriba sobre una mesa y la parte superior del mismo (en el modo vertical) apunta al oeste, el valor de Quaternion es (0, 0, 0.707, 0.707). El dispositivo se giró 90 grados alrededor del eje Z de la Tierra.

  • Cuando el dispositivo se sostiene de manera vertical, con la parte superior (en el modo vertical) apuntando al cielo y la parte posterior orientada al norte, es porque el dispositivo se giró 90 grados alrededor del eje X. El valor de Quaternion es (0.707, 0, 0, 0.707).

  • Si el dispositivo se coloca de manera tal que el borde izquierdo esté sobre una mesa y la parte superior apunte al norte, es porque el dispositivo se giró –90 grados alrededor del eje Y (o 90 grados alrededor del eje Y negativo). El valor de Quaternion es (0, -0.707, 0, 0.707).

Velocidad de sensor

  • Más rápido: obtener los datos del sensor tan rápido como sea posible (no se garantiza la devolución en el subproceso de interfaz de usuario).
  • Juego: velocidad adecuada para juegos (no se garantiza la devolución en el subproceso de interfaz de usuario).
  • Predeterminado: velocidad predeterminada adecuada para los cambios de orientación de pantalla.
  • Interfaz de usuario: velocidad adecuada para la interfaz de usuario general.

Si no se garantiza la ejecución del controlador de eventos en el subproceso de interfaz de usuario y si el controlador de eventos necesita tener acceso a elementos de la interfaz de usuario, use el método MainThread.BeginInvokeOnMainThread para ejecutar ese código en el subproceso de interfaz de usuario.

API