Share via


Xamarin.Essentials:Pusula

Compass sınıfı, cihazın manyetik kuzey başlığını izlemenizi sağlar.

Kullanmaya başlayın

Bu API'yi kullanmaya başlamak için kitaplığın projelerinizde düzgün yüklendiğinden ve ayarlandığından emin olmak için Xamarin.Essentials kullanmaya başlama kılavuzunu okuyun.

Pusula Kullanma

Sınıfınızda için Xamarin.Essentials bir başvuru ekleyin:

using Xamarin.Essentials;

Pusula işlevi, pusuladaki Start değişiklikleri dinlemek için ve Stop yöntemlerini çağırarak çalışır. Tüm değişiklikler olay üzerinden ReadingChanged geri gönderilir. Örnek aşağıda verilmiştir:

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

Algılayıcı Hızı

  • En hızlı – Sensör verilerini mümkün olan en hızlı şekilde alın (UI iş parçacığında döndürüleceği garanti değildir).
  • Oyun – Oyunlara uygun fiyat (kullanıcı arabirimi iş parçacığında döndürülmesi garanti değildir).
  • Varsayılan – Ekran yönlendirme değişiklikleri için uygun varsayılan hız.
  • Ui – Genel kullanıcı arabirimi için uygun oran.

Olay işleyicinizin kullanıcı arabirimi iş parçacığında çalışması garanti değilse ve olay işleyicisinin kullanıcı arabirimi öğelerine erişmesi gerekiyorsa, ui iş parçacığında bu kodu çalıştırmak için yöntemini kullanın MainThread.BeginInvokeOnMainThread .

Platform Uygulama Özellikleri

Android, pusula başlığını almak için bir API sağlamaz. Google tarafından önerilen manyetik kuzey başlığını hesaplamak için ivmeölçer ve manyetometre kullanırız.

Nadir durumlarda tutarsız sonuçlar görebilirsiniz çünkü algılayıcıların ayarlanması gerekir ve bu da cihazınızı şekil-8 hareketinde taşımayı içerir. Bunu yapmanın en iyi yolu Google Haritalar açmak, konumunuz için noktaya dokunmak ve Pusulayı ayarla'yı seçmektir.

Uygulamanızdan aynı anda birden fazla algılayıcı çalıştırmak sensör hızını ayarlayabilir.

Düşük Geçiş Filtresi

Android pusula değerlerinin güncelleştirilmesi ve hesaplanması nedeniyle değerlerin düzeltilmesi gerekebilir. Açıların sinüs ve kosinüs değerlerinin ortalamasını alan bir Düşük Geçiş Filtresi uygulanabilir ve parametresini kabul bool applyLowPassFilter eden yöntem aşırı yüklemesi kullanılarak Start açılabilir:

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

Bu yalnızca Android platformunda uygulanır ve iOS ve UWP'de parametresi yoksayılır. Daha fazla bilgiyi burada okuyabilirsiniz.

API

Channel 9 ve YouTube'da daha fazla Xamarin videosu bulun.