Sdílet prostřednictvím


Xamarin.Essentials:Kompas

Třída Compass umožňuje monitorovat magnetické severní záhlaví zařízení.

Začínáme

Pokud chcete začít používat toto rozhraní API, přečtěte si úvodní příručkuXamarin.Essentials, abyste měli jistotu, že je knihovna správně nainstalovaná a nastavená ve vašich projektech.

Použití kompasu

Přidejte do Xamarin.Essentials předmětu odkaz:

using Xamarin.Essentials;

Funkce kompasu funguje voláním Start metod a Stop nasloucháním změn kompasu. Všechny změny se posílají zpět prostřednictvím ReadingChanged události. Zde je příklad:

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

Rychlost snímače

  • Nejrychlejší – co nejrychleji získejte data ze snímačů (není zaručeno, že se vrátíte na vlákno uživatelského rozhraní).
  • Hra – Rychlost vhodná pro hry (není zaručeno vrácení na vlákno uživatelského rozhraní).
  • Výchozí – Výchozí rychlost vhodná pro změny orientace obrazovky.
  • UŽIVATELSKÉ rozhraní – Rychlost vhodná pro obecné uživatelské rozhraní.

Pokud obslužná rutina události není zaručena spuštění ve vlákně uživatelského rozhraní a pokud obslužná rutina události potřebuje přístup k prvkům uživatelského rozhraní, použijte metodu MainThread.BeginInvokeOnMainThread ke spuštění kódu ve vlákně uživatelského rozhraní.

Specifika implementace platformy

Android neposkytuje rozhraní API pro načtení nadpisu kompasu. K výpočtu magnetického severního nadpisu, který doporučuje Google, používáme akcelerometr a magnetometr.

Ve výjimečných případech můžete vidět nekonzistentní výsledky, protože senzory je potřeba kalibrovat, což zahrnuje přesun zařízení na obrázku 8 pohybu. Nejlepší způsob, jak to udělat, je otevřít Google Maps, klepnout na tečku pro vaši polohu a vybrat Kalibrovat kompas.

Spouštění více senzorů z aplikace současně může upravit rychlost senzoru.

Filtr nízkého průchodu

Vzhledem k tomu, jak se hodnoty kompasu Androidu aktualizují a vypočítají, může být potřeba hodnoty vyhladit. Lze použít filtr s nízkým průchodem, který zprůměruje sinusové a kosinusové hodnoty úhlů a lze ho zapnout pomocí Start přetížení metody, která přijímá bool applyLowPassFilter parametr:

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

Použije se jenom na platformě Android a parametr se ignoruje v iOSu a UPW. Další informace si můžete přečíst tady.

rozhraní API

Další videa o Xamarinu najdete na Channel 9 a YouTube.