Xamarin.Essentials: Compass

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

başlarken

Bu API'yi kullanmaya başlamak için kitaplığın projelerinize düzgün bir şekilde yük olduğundan ve ayar olduğundan emin olmak için başlangıç kılavuzunu okuyun.

Compass kullanma

sınıfınıza Xamarin.Essentials bir başvuru ekleyin:

using Xamarin.Essentials;

Compass işlevi, compass'ta yapılan değişiklikleri dinlemek için ve StartStop yöntemlerini çağırarak çalışır. Tüm değişiklikler olay aracılığıyla geri ReadingChanged 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ı – Algılayıcı verilerini mümkün olan en hızlı şekilde elde etmek (kullanıcı arabirimi iş parçacığında geri dönmesi garanti edilemez).
  • Oyun – Oyunlar için uygun hız (kullanıcı arabirimi iş parçacığında geri dönüşü garanti edilemez).
  • Default: Ekran yönlendirme değişiklikleri için varsayılan hız uygundur.
  • UI – Genel kullanıcı arabirimi için uygun hız.

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

Platform Uygulama Özellikleri

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

Nadir durumlarda algılayıcıların ayarlanmış olması ve bu nedenle cihazınızı şekil 8 hareketine taşımanın da kapsamış olması nedeniyle tutarsız sonuçlar görüyor olabilirsiniz. Bunu yapmanın en iyi yolu Google Haritalar'yi açmak, konumunuz için noktaya dokunmak ve Compass'ı ayarla'ya seçmektir.

Aynı anda uygulamanıza birden fazla algılayıcının çalıştırarak sensör hızını ayarlayabilirsiniz.

Düşük Geçiş Filtresi

Android compass değerlerinin güncelleştirilmiş ve hesaplanmış olması nedeniyle değerlerin düzleştirmeye ihtiyacı olabilir. Açıların sinüs ve kosinüs değerlerinin ortalamasını alan bir Düşük Geçiş Filtresi uygulanabilir ve parametresini kabul eden yöntem aşırı yüklemesi kullanılarak açık bool applyLowPassFilter olabilir:

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

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

API

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