Xamarin.Essentials:Boussole

La classe Compass vous permet de superviser le cap du nord magnétique de l’appareil.

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 la boussole

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

using Xamarin.Essentials;

La fonctionnalité de boussole appelle les méthodes Start et Stop pour écouter les changements relatifs à la boussole. Toutes les variations peuvent être écoutées via l’événement ReadingChanged. Voici un exemple :

public class CompassTest
{
    // Set speed delay for monitoring changes.
    SensorSpeed speed = SensorSpeed.UI;

    public CompassTest()
    {
        // Register for reading changes, be sure to unsubscribe when finished
        Compass.ReadingChanged += Compass_ReadingChanged;
    }

    void Compass_ReadingChanged(object sender, CompassChangedEventArgs e)
    {
        var data = e.Reading;
        Console.WriteLine($"Reading: {data.HeadingMagneticNorth} degrees");
        // Process Heading Magnetic North
    }

    public void ToggleCompass()
    {
        try
        {
            if (Compass.IsMonitoring)
              Compass.Stop();
            else
              Compass.Start(speed);
        }
        catch (FeatureNotSupportedException fnsEx)
        {
            // Feature not supported on device
        }
        catch (Exception ex)
        {
            // Some other exception has occurred
        }
    }
}

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.

Caractéristiques de mise en œuvre de la plateforme

Android ne fournit pas d’API pour récupérer l’en-tête de la boussole. Nous utilisons l’accéléromètre et le magnétomètre pour calculer le cap du nord magnétique, ce qui est recommandé par Google.

Dans de rares cas, vous constaterez peut-être des résultats incohérents, car les capteurs doivent être étalonnés, ce qui implique de bouger votre appareil en formant un 8. Pour ce faire, ouvrez Google Maps, appuyez sur le point correspondant à votre position, puis sélectionnez Calibrate compass (Étalonner la boussole).

L’exécution de plusieurs capteurs à partir de votre application en même temps peut ajuster la vitesse du capteur.

Filtre passe-bas

En raison du mode de mise à jour et de calcul des valeurs de la boussole Android, il peut s’avérer nécessaire d’affiner ces valeurs. Un filtre passe-bas peut être appliqué qui moyenne les valeurs sinusoïdes et cosinus des angles et peut être activé à l’aide de la Start méthode surcharge, qui accepte le bool applyLowPassFilter paramètre :

Compass.Start(SensorSpeed.UI, applyLowPassFilter: true);

Il est appliqué uniquement sur la plateforme Android et le paramètre est ignoré sur iOS et UWP. Vous trouverez plus d’informations ici.

API

Retrouvez d’autres vidéos Xamarin sur Channel 9 et YouTube.