Xamarin.Essentials:Bussola
La classe Compass consente di monitorare la direzione del nord magnetico del dispositivo.
Per iniziare a usare questa API, leggere la guida introduttiva per Xamarin.Essentials assicurarsi che la libreria sia installata e configurata correttamente nei progetti.
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
}
}
}
- 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.
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.
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.
Altri video di Xamarin sono disponibili su Channel 9 e YouTube.