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. Veja 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 de orientação de 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 título 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 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 de Passagem Baixa pode ser aplicado que faz a média dos valores de seno e cosseno dos ângulos e pode ser ativado usando a sobrecarga do Start método, 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

Encontre mais vídeos sobre o Xamarin no Channel 9 e no YouTube.