Xamarin.Essentials:Bússola
A classe Compass permite que você monitore o norte magnético do dispositivo.
Introdução
Para começar a usar essa API, leia o guia de introdução para Xamarin.Essentials garantir que a biblioteca esteja instalada e configurada corretamente em seus projetos.
Como usar Compass
Adicione uma referência a Xamarin.Essentials em sua classe:
using Xamarin.Essentials;
A funcionalidade de Bússola funciona chamando os métodos Start
e Stop
e fica atenta às alterações na bússola. Todas as alterações são enviadas de volta por meio do evento ReadingChanged
. Este é um exemplo:
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
}
}
}
Sensor de velocidade
- Mais rápido – obtenha os dados do sensor o mais rápido possível (não é garantido retornar no thread de interface do usuário).
- Jogo – taxa adequada para jogos (não é garantido retornar no thread de interface do usuário).
- Padrão – Taxa padrão adequada para alterações na orientação da tela.
- Interface do usuário – taxa adequada para a interface do usuário geral.
Se o manipulador de eventos não tiver a garantia de ser executado no thread da interface do usuário e se precisar acessar os elementos de interface do usuário, use o método MainThread.BeginInvokeOnMainThread
para executar esse código no thread da interface do usuário.
Particularidades de implementação da plataforma
O Android não fornece uma API para recuperar o rumo da bússola. Utilizamos o acelerômetro e o magnetômetro para calcular o norte magnético, o que é recomendado pelo Google.
Em casos raros, talvez você veja resultados inconsistentes devido à necessidade de calibração dos sensores, o que envolve a movimentação do seu dispositivo em um movimento de figura 8. A melhor maneira de fazer isso é abrir o Google Maps, tocar no ponto do seu local e selecionar Calibrar bússola.
A execução de vários sensores do seu aplicativo ao mesmo tempo pode ajustar a velocidade do sensor.
Filtro Passa Baixa
Devido ao modo como os valores da bússola do Android são atualizados e calculados, pode haver a necessidade para suavizar os valores. Um filtro passa-baixo pode ser aplicado para calcular a média dos valores de seno e cosseno dos ângulos e pode ser ativado usando o Start
método sobrecarga, que aceita o bool applyLowPassFilter
parâmetro:
Compass.Start(SensorSpeed.UI, applyLowPassFilter: true);
Isso só é aplicado na plataforma Android, e o parâmetro é ignorado no iOS e UWP. Encontre mais informações aqui.
API
Vídeo relacionados
Encontre mais vídeos sobre o Xamarin no Channel 9 e no YouTube.