Xamarin.Essentials: Kompas

Třída glóbus vám umožní monitorovat magnetické záhlaví zařízení v severním.

Začínáme

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

Použití kompasu

Do třídy přidejte odkaz Xamarin.Essentials :

using Xamarin.Essentials;

Funkce glóbus funguje tak, že zavolá Start metody a, Stop aby naslouchala změnám v kompasu. Jakékoli změny se odešlou zpátky prostřednictvím ReadingChanged události. Zde naleznete 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 senzoru

  • Nejrychlejší – Získejte data senzorů co nejrychleji (nezaručujeme návrat ve VLÁKNĚ uživatelského rozhraní).
  • Hra – sazba vhodná pro hry (nezaručujeme návrat ve VLÁKNĚ uživatelského rozhraní).
  • Výchozí – výchozí sazba je vhodná pro změny orientace obrazovky.
  • Uživatelské rozhraní – sazba vhodná pro obecné uživatelské rozhraní.

Pokud vaše 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 MainThread.BeginInvokeOnMainThread metodu ke spuštění tohoto kódu ve vlákně uživatelského rozhraní.

Specifické pro implementaci platformy

Android neposkytuje rozhraní API pro načtení nadpisu kompasu. Využijeme akcelerometr a magnetometer k výpočtu magnetické hlavičky severů, kterou doporučuje Google.

Ve výjimečných případech vidíte nekonzistentní výsledky, protože senzory musí být kalibrovány, což zahrnuje přesun zařízení při pohybu na obrázku-8. Nejlepším způsobem, jak to udělat, je otevřít Google Mapy, klepnout na tečku pro vaše umístění a vybrat možnost kalibrovat kompas.

Spuštění více senzorů z vaší aplikace současně může upravit rychlost snímače.

Filtr nízká Pass

Vzhledem k tomu, jak se hodnoty pro Android glóbus aktualizují a vypočítávají, může být potřeba hodnoty vyhladit. Je možné použít Filtr s nízkým průchodem , který vypočítá průměrnou hodnotu sinus a kosinus úhlů a lze jej zapnout pomocí 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 iOS a UWP. Další informace si můžete přečíst tady.

rozhraní API

Další videa Xamarin najdete na webu Channel 9 a YouTube.