Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.