Xamarin.Essentials:Bussola

La classe Compass consente di monitorare la direzione del nord magnetico del dispositivo.

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 Compass

Aggiungere un riferimento a Xamarin.Essentials nella classe :

using Xamarin.Essentials;

La funzionalità Compass opera chiamando i metodi Start e Stop per attivare l'ascolto dei cambi della bussola. Le eventuali modifiche vengono inviate tramite l'evento ReadingChanged. Ecco un esempio:

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

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.

Informazioni di implementazione specifiche della piattaforma

Android non fornisce un'API per il recupero dell'intestazione della bussola. Vengono utilizzati l'accelerometro e il magnetometro per calcolare la direzione del nord magnetico, come consigliato da Google.

In rari casi, si potrebbero osservare risultati non coerenti perché i sensori devono essere calibrati e a questo scopo è necessario muovere il dispositivo disegnando una forma a 8. Il modo migliore per eseguire questa operazione consiste nell'aprire Google Maps, toccare il punto corrispondente alla propria posizione e selezionare Calibrate compass (Calibra bussola).

L'esecuzione di più sensori dall'app contemporaneamente può regolare la velocità del sensore.

Filtro passa basso

A causa di come vengono aggiornati e calcolati i valori della bussola in Android, potrebbe essere necessario uniformare i valori. È possibile applicare un filtro pass basso che calcola la media dei valori seno e coseno degli angoli e può essere attivato usando l'overload del Start metodo , che accetta il bool applyLowPassFilter parametro :

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

Il parametro viene applicato solo alla piattaforma Android e ignorato nei sistemi iOS e UWP. Per altre informazioni, vedere qui.

API

Altri video di Xamarin sono disponibili su Channel 9 e YouTube.