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.