Xamarin.Essentials: Brújula
La clase Compass permite supervisar la dirección del norte magnético del dispositivo.
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.
Agregue una referencia a Xamarin.Essentials en la clase:
using Xamarin.Essentials;
La funcionalidad Compass funciona mediante una llamada a los métodos Start
y Stop
para realizar escuchas de los cambios realizados en la brújula. Los cambios se enviarán a través del evento ReadingChanged
. A continuación se muestra un ejemplo:
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
}
}
}
- 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.
Android no proporciona una API para recuperar la dirección de la brújula. El acelerómetro y el magnetómetro se usan para calcular la dirección del norte magnético, lo que recomienda Google.
En casos poco habituales, es posible que vea resultados incoherentes porque sea necesario calibrar los sensores, lo que implica mover el dispositivo describiendo un ocho. La mejor manera de hacerlo es abrir Google Maps, pulsar en el punto de la ubicación y seleccionar Calibrar la brújula.
La ejecución simultánea de varios sensores desde la aplicación puede ajustar la velocidad del sensor.
Debido a la forma de calcular y actualizar los valores de la brújula de Android, es posible que sea necesario suavizarlos. Se puede aplicar un filtro de paso bajo que calcula el promedio de los valores de seno y coseno de los ángulos y que se puede activar si se sobrecarga el método Start
, que acepta el parámetro bool applyLowPassFilter
:
Compass.Start(SensorSpeed.UI, applyLowPassFilter: true);
Esto solo se aplica a la plataforma Android; el parámetro se ignora en iOS y UWP. Puede leer más información aquí.