Xamarin.Essentials: OrientationSensor

La classe Capteur d’orientation vous permet de surveiller l’orientation d’un appareil dans l’espace tridimensionnel.

Notes

Cette classe permet de déterminer l’orientation d’un appareil dans un espace en 3D. Si vous avez besoin de déterminer si l’écran de l’appareil vidéo est en mode portrait ou paysage, utilisez la propriété Orientation de l’objet ScreenMetrics disponible à partir de la classe DeviceDisplay.

Bien démarrer

Pour commencer à utiliser cette API, lisez le guide de prise en main pour Xamarin.Essentials vous assurer que la bibliothèque est correctement installée et configurée dans vos projets.

Utilisation de Capteur d’orientation

Ajoutez une référence à Xamarin.Essentials dans votre classe :

using Xamarin.Essentials;

OrientationSensor est activé en appelant la méthode Start pour surveiller les modifications apportées à l’orientation de l’appareil. Il est désactivé en appelant la méthode Stop. Toutes les variations peuvent être écoutées via l’événement ReadingChanged. Voici un exemple d’utilisation :


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

Les lectures OrientationSensor sont retournées sous la forme d’un Quaternion qui décrit l’orientation de l’appareil en fonction de deux systèmes de coordonnées 3D :

L’appareil (en général, un téléphone ou une tablette) dispose d’un système de coordonnées 3D avec les axes suivants :

  • L’axe X positif pointe vers la droite de l’écran en mode portrait.
  • L’axe Y positif pointe vers le haut de l’appareil en mode portrait.
  • L’axe Z positif pointe en dehors de l’écran.

Le système de coordonnées 3D de la terre a les axes suivants :

  • L’axe X positif est la tangente de la surface de la terre et pointe vers l’est.
  • L’axe Y positif est aussi la tangente de la surface de la terre et pointe vers le nord.
  • L’axe Z positif est perpendiculaire à la surface de la terre et pointe vers le haut.

Quaternion décrit la rotation du système de coordonnées de l’appareil par rapport au système de coordonnées de la terre.

Une valeur Quaternion est très étroitement liée à la rotation autour d’un axe. Si un axe de rotation est le vecteur normalisé (ax, ay, az), et l’angle de rotation est Θ, alors les composants (X, Y, Z, W) du quaternion sont :

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

Il s’agit de systèmes de coordonnées droitiers, donc avec le pouce de la main droit pointée dans le sens positif de l’axe de rotation, la courbe des doigts indique la direction de rotation des angles positifs.

Exemples :

  • Lorsque l’appareil se trouve à plat sur une table avec son écran vers le haut, avec le bord supérieur de l’appareil (en mode portrait) pointant vers le nord, les deux systèmes de coordonnées sont alignés. La valeur Quaternion représente le quaternion d’identité (0, 0, 0, 1). Toutes les rotations peuvent être analysées par rapport à cette position.

  • Lorsque l’appareil se trouve à plat sur une table avec son écran vers le haut, avec le bord supérieur de l’appareil (en mode portrait) pointant vers l’ouest, la valeur Quaternion est (0, 0, 0.707, 0.707). L’appareil a été pivoté de 90 degrés autour de l’axe Z de la terre.

  • Lorsque l’appareil est maintenu à la verticale afin que le haut (en mode portrait) pointe vers le ciel et que l’arrière de l’appareil soit face au nord, l’appareil a été pivoté de 90 degrés autour de l’axe X. La valeur Quaternion est (0.707, 0, 0, 0.707).

  • Si l’appareil est positionné de sorte que son bord gauche se trouve sur une table et que les points supérieurs vers le nord, l’appareil a été pivoté de -90 degrés autour de l’axe Y (ou de 90 degrés autour de l’axe Y négatif). La valeur Quaternion est (0, -0.707, 0, 0.707).

Vitesse de capteur

  • Le plus rapide : obtenir les données de capteur aussi rapidement que possible (aucune garantie de retour sur le thread d’interface utilisateur).
  • Jeu : débit adapté aux jeux (aucune garantie de retour sur le thread d’interface utilisateur).
  • Par défaut : taux par défaut adapté aux changements d’orientation de l’écran.
  • UI : débit adapté à une interface utilisateur général.

Si votre gestionnaire d’événements ne garantit pas l’exécution sur le thread d’interface utilisateur et si le gestionnaire d’événements doit accéder aux éléments de l’interface utilisateur, utilisez la méthode MainThread.BeginInvokeOnMainThread pour exécuter ce code sur le thread d’interface utilisateur.

API