Aracılığıyla paylaş


Cihaz algılayıcılarına erişme

Browse sample. Örneğe göz atın

Cihazlarda kullanabileceğiniz her türlü algılayıcı vardır. Bazı algılayıcılar hareketi algılayabilir, diğerleri ise ışık gibi ortamdaki değişiklikleri algılayabilir. Bu algılayıcıları izlemek ve tepki vermek, uygulamanızın cihazın kullanılma şekline uyum sağlaması için dinamik olmasını sağlar. Ayrıca algılayıcılardaki değişikliklere yanıt verebilir ve kullanıcıyı uyarabilirsiniz. Bu makale, .NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) tarafından desteklenen yaygın algılayıcılara kısa bir genel bakış sağlar.

Cihaz algılayıcısı ile ilgili türler ad alanında Microsoft.Maui.Devices.Sensors kullanılabilir.

Algılayıcı hızı

Algılayıcı hızı, algılayıcının uygulamanıza veri döndürme hızını ayarlar. Bir algılayıcıyı başlattığınızda, numaralandırma ile SensorSpeed istenen sensör hızını sağlarsınız:

  • Fastest
    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).

  • Game
    Oyunlar için uygun fiyat (UI iş parçacığında döndürülmesi garanti değildir).

  • UI
    Genel kullanıcı arabirimi için uygun oran.

  • Default
    Ekran yönlendirme değişiklikleri için uygun varsayılan hız.

Uyarı

Bir kerede çok fazla algılayıcının izlenmesi, algılayıcı verilerinin uygulamanıza iade edilmesi hızını etkileyebilir.

.NET 8'de aralıklar SensorSpeed tüm platformlarda aynıdır:

  • Default 200ms aralığı kullanır.
  • UI 60ms aralık kullanır.
  • Game 20ms aralığı kullanır.
  • Fastest 5ms aralığı kullanır.

Algılayıcı olay işleyicileri

veya Fastest hızlarına sahip Game algılayıcılara eklenen olay işleyicilerinin kullanıcı arabirimi iş parçacığında çalışması garanti değildir. Olay işleyicisinin kullanıcı arabirimi öğelerine erişmesi gerekiyorsa, ui iş parçacığında MainThread.BeginInvokeOnMainThread bu kodu çalıştırmak için yöntemini kullanın.

İvme Ölçer

İvme ölçer sensörü, cihazın üç ekseni boyunca ivmesini ölçer. Algılayıcı tarafından bildirilen veriler, kullanıcının cihazı nasıl taşıdığını temsil eder.

Arabirim IAccelerometer , sensöre erişim sağlar ve özelliği aracılığıyla Accelerometer.Default kullanılabilir. IAccelerometer Hem arabirim hem Accelerometer de sınıf ad alanında Microsoft.Maui.Devices.Sensors yer alır.

Başlarken

Ivmeölçer işlevine erişmek için aşağıdaki platforma özgü kurulum gerekebilir:

Uygulamanız Android 12+'yi (API 31+) hedeflediyse sistem, bu algılayıcıdaki verilerin yenileme hızına 200 Hz sınırı yerleştirir. Uygulamanızın algılayıcı hızını kullanarak algılayıcı verilerini toplaması Fastest gerekiyorsa, izni bildirmeniz HIGH_SAMPLING_RATE_SENSORS gerekir. İzni aşağıdaki yollarla yapılandırabilirsiniz:

  • Derleme tabanlı izni ekleyin:

    Platforms/Android/MainApplication.cs dosyasını açın ve yönergelerin ardından using aşağıdaki derleme özniteliğini ekleyin:

    [assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
    

    - veya -

  • Android Bildirimini güncelleştirin:

    Platforms/Android/AndroidManifest.xml dosyasını açın ve düğüme aşağıdaki satırı manifest ekleyin:

    <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
    

    - veya -

  • Bildirim düzenleyicisinde Android Bildirimi'ni güncelleştirin:

    Visual Studio'da Platformlar/Android/AndroidManifest.xml dosyasına çift tıklayarak Android bildirim düzenleyicisini açın. Ardından Gerekli izinler'in altında HIGH_SAMPLING_RATE_SENSORS iznini denetleyin. Bu, AndroidManifest.xml dosyasını otomatik olarak güncelleştirir.

Dekont

Bir kullanıcı cihaz geçişlerini kullanarak mikrofon erişimini kapatırsa, izin bildirip bildirmediğinize bakılmaksızın hareket ve konum algılayıcıları her zaman hız sınırına sahiptirHIGH_SAMPLING_RATE_SENSORS.

Ivmeölçer sensörünü izleme

Ivmeölçer sensörünü izlemeye başlamak için yöntemini çağırın IAccelerometer.Start . .NET MAUI olayı yükselterek IAccelerometer.ReadingChanged uygulamanıza ivmeölçer veri değişiklikleri gönderir. Algılayıcının izlenmesini IAccelerometer.Stop durdurmak için yöntemini kullanın. Ivmeölçerin izleme durumunu özelliğiyle IAccelerometer.IsMonitoring algılayabilirsiniz. Bu durum, ivmeölçer başlatıldıysa ve şu anda izleniyorsa olacaktır true .

Aşağıdaki kod örneği, değişiklikler için ivmeölçerin izlenmesini gösterir:

public void ToggleAccelerometer()
{
    if (Accelerometer.Default.IsSupported)
    {
        if (!Accelerometer.Default.IsMonitoring)
        {
            // Turn on accelerometer
            Accelerometer.Default.ReadingChanged += Accelerometer_ReadingChanged;
            Accelerometer.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off accelerometer
            Accelerometer.Default.Stop();
            Accelerometer.Default.ReadingChanged -= Accelerometer_ReadingChanged;
        }
    }    
}

private void Accelerometer_ReadingChanged(object sender, AccelerometerChangedEventArgs e)
{
    // Update UI Label with accelerometer state
    AccelLabel.TextColor = Colors.Green;
    AccelLabel.Text = $"Accel: {e.Reading}";
}

Ivmeölçer okumaları G olarak bildirilir. G, dünyanın çekim alanı tarafından uygulanan yer çekimine eşit bir çekim gücü birimidir $(9,81 m/sn^2)$.

Koordinat sistemi, cihazın ekranına göre varsayılan yönlendirmesinde tanımlanır. Cihazın ekran yönü değiştiğinde eksenler değiştirilmez.

X ekseni yataydır ve sağa doğru, Y ekseni dikeydir ve yukarı doğru ilerler ve Z ekseni ekranın ön yüzünün dışına doğru ilerler. Bu sistemde, ekranın arkasındaki koordinatların negatif Z değerleri vardır.

Örnekler:

  • Cihaz bir tabloda düz bir şekilde uzandığında ve sol tarafına sağa doğru itildiğinde, X hızlandırma değeri pozitif olur.

  • Cihaz bir tabloda düz olduğunda, ivme değeri +1,00 G veya $(+9,81 m/sn^2)$'dır. Bu değer$ $(0 m/sn^2)$ cihazının ivmesine karşılık gelir ve $(-9,81 m/s^2)$ ağırlık kuvvetinden çıkarılarak G cinsinden normalleştirilir.

  • Cihaz bir tabloda düz olduğunda ve A $m/s^2$ ivmesiyle gökyüzüne doğru itildiğinde, ivme değeri $(+A m/s^2)$ cihazının $(-9,81 m/s^2)$ ağırlık kuvveti eksisine karşılık gelen ve G cinsinden normalleştirilen $A+9,81$ değerine eşittir.

Platforma özgü bilgiler (Ivmeölçer)

Ivmeölçer sensörüyle ilgili platforma özgü bir bilgi yoktur.

Barometre

Barometre sensörü ortam hava basıncını ölçer. Sensör tarafından bildirilen veriler geçerli hava basıncını temsil eder. Bu veriler, algılayıcıyı izlemeye ilk başladığınızda ve ardından basınç her değiştiğinde bildirilir.

Arabirim IBarometer , sensöre erişim sağlar ve özelliği aracılığıyla Barometer.Default kullanılabilir. IBarometer Hem arabirim hem Barometer de sınıf ad alanında Microsoft.Maui.Devices.Sensors yer alır.

Barometre sensörünü izlemeye başlamak için yöntemini çağırın IBarometer.Start . .NET MAUI, etkinliği yükselterek IBarometer.ReadingChanged uygulamanıza hava basıncı okumaları gönderir. Algılayıcının izlenmesini IBarometer.Stop durdurmak için yöntemini kullanın. Barometrenin izleme durumunu özelliğiyle IBarometer.IsMonitoring algılayabilirsiniz. Bu durum, barometrenin şu anda izleniyor olması durumunda olacaktır true .

Basınç okuma hektopaskal cinsinden temsil edilir.

Aşağıdaki kod örneği, barometrenin değişiklikler için izlenmesini gösterir:

public void ToggleBarometer()
{
    if (Barometer.Default.IsSupported)
    {
        if (!Barometer.Default.IsMonitoring)
        {
            // Turn on barometer
            Barometer.Default.ReadingChanged += Barometer_ReadingChanged;
            Barometer.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off barometer
            Barometer.Default.Stop();
            Barometer.Default.ReadingChanged -= Barometer_ReadingChanged;
        }
    }
}

private void Barometer_ReadingChanged(object sender, BarometerChangedEventArgs e)
{
    // Update UI Label with barometer state
    BarometerLabel.TextColor = Colors.Green;
    BarometerLabel.Text = $"Barometer: {e.Reading}";
}

Platforma özgü bilgiler (Barometre)

Bu bölümde, barometre sensörüyle ilgili platforma özgü uygulama ayrıntıları açıklanmaktadır.

Platforma özgü uygulama ayrıntıları yok.

Compass

Pusula algılayıcısı cihazın manyetik kuzey başlığını izler.

Arabirim ICompass , sensöre erişim sağlar ve özelliği aracılığıyla Compass.Default kullanılabilir. ICompass Hem arabirim hem Compass de sınıf ad alanında Microsoft.Maui.Devices.Sensors yer alır.

Pusula sensörünü izlemeye başlamak için yöntemini çağırın ICompass.Start . Pusula başlığı değiştiğinde ICompass.ReadingChanged .NET MAUI olayı tetikler. Algılayıcının izlenmesini ICompass.Stop durdurmak için yöntemini kullanın. Özelliğiyle ICompass.IsMonitoring pusulanın izleme durumunu algılayabilirsiniz. Bu durum pusulanın true şu anda izleniyor olması durumunda olacaktır.

Aşağıdaki kod örneği, pusulanın değişiklikler için izlenmesini gösterir:

private void ToggleCompass()
{
    if (Compass.Default.IsSupported)
    {
        if (!Compass.Default.IsMonitoring)
        {
            // Turn on compass
            Compass.Default.ReadingChanged += Compass_ReadingChanged;
            Compass.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off compass
            Compass.Default.Stop();
            Compass.Default.ReadingChanged -= Compass_ReadingChanged;
        }
    }
}

private void Compass_ReadingChanged(object sender, CompassChangedEventArgs e)
{
    // Update UI Label with compass state
    CompassLabel.TextColor = Colors.Green;
    CompassLabel.Text = $"Compass: {e.Reading}";
}

Platforma özgü bilgiler (Pusula)

Bu bölümde pusula özelliğiyle ilgili platforma özgü uygulama ayrıntıları açıklanmaktadır.

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

Nadir durumlarda, algılayıcıların ayarlanması gerektiğinden tutarsız sonuçlar görebilirsiniz. Android'de pusulanın yeniden tutulması telefon modeline ve Android sürümüne göre değişir. Pusulayı yeniden ayarlamak için İnternet'te arama yapmanız gerekir. Pusulayı yeniden ölçeklendirmeye yardımcı olabilecek iki bağlantı şunlardır:

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

Lowpass filtresi

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

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

Bu yalnızca Android platformunda uygulanır ve iOS ve Windows'ta parametresi yoksayılır. Daha fazla bilgi için bu GitHub sorun açıklamasına bakın.

Salla -mak

Bu makale shake'i algılayıcı olarak listelese de değildir. Ivmeölçer, cihazın ne zaman sarsılmış olduğunu algılamak için kullanılır.

Arabirim IAccelerometer , sensöre erişim sağlar ve özelliği aracılığıyla Accelerometer.Default kullanılabilir. IAccelerometer Hem arabirim hem Accelerometer de sınıf ad alanında Microsoft.Maui.Devices.Sensors yer alır.

Dekont

Uygulamanızın algılayıcı hızını kullanarak ivmeölçer algılayıcı verilerini toplaması Fastest gerekiyorsa, izni bildirmeniz HIGH_SAMPLING_RATE_SENSORS gerekir. Daha fazla bilgi için bkz . Accelerometer.

Sallama algılama API'sinde hızlandırmayı hesaplamak için ivmeölçerden ham okumalar kullanılır. Son ivmeölçer olaylarının 3/4'ünün son yarım saniyede olup olmadığını algılamak için basit bir kuyruk mekanizması kullanır. Hızlandırma, ivmeölçerden X, Y ve Z ($x^2+y^2+z^2$) okumalarının karesi eklenerek ve belirli bir eşiğe karşılaştırılarak hesaplanır.

Ivmeölçer sensörünü izlemeye başlamak için yöntemini çağırın IAccelerometer.Start . Sallama algılandığında, IAccelerometer.ShakeDetected olay tetikler. Algılayıcının izlenmesini IAccelerometer.Stop durdurmak için yöntemini kullanın. Ivmeölçerin izleme durumunu özelliğiyle IAccelerometer.IsMonitoring algılayabilirsiniz. Bu durum, ivmeölçer başlatıldıysa ve şu anda izleniyorsa olacaktır true .

için kullanılması Game veya daha hızlı SensorSpeedkullanılması önerilir.

Aşağıdaki kod örneğinde olay için ivmeölçer izleme gösterilmektedir ShakeDetected :

private void ToggleShake()
{
    if (Accelerometer.Default.IsSupported)
    {
        if (!Accelerometer.Default.IsMonitoring)
        {
            // Turn on accelerometer
            Accelerometer.Default.ShakeDetected += Accelerometer_ShakeDetected;
            Accelerometer.Default.Start(SensorSpeed.Game);
        }
        else
        {
            // Turn off accelerometer
            Accelerometer.Default.Stop();
            Accelerometer.Default.ShakeDetected -= Accelerometer_ShakeDetected;
        }
    }
}

private void Accelerometer_ShakeDetected(object sender, EventArgs e)
{
    // Update UI Label with a "shaked detected" notice, in a randomized color
    ShakeLabel.TextColor = new Color(Random.Shared.Next(256), Random.Shared.Next(256), Random.Shared.Next(256));
    ShakeLabel.Text = $"Shake detected";
}

Platforma özgü bilgiler (Sallama)

Ivmeölçer sensörüyle ilgili platforma özgü bir bilgi yoktur.

Jiroskop

Jiroskop sensörü, cihazın üç birincil ekseninin etrafındaki açısal döndürme hızını ölçer.

Arabirim IGyroscope , sensöre erişim sağlar ve özelliği aracılığıyla Gyroscope.Default kullanılabilir. IGyroscope Hem arabirim hem Gyroscope de sınıf ad alanında Microsoft.Maui.Devices.Sensors yer alır.

Başlarken

Jiroskop işlevine erişmek için aşağıdaki platforma özgü kurulum gerekebilir:

Uygulamanız Android 12+'yi (API 31+) hedeflediyse sistem, bu algılayıcıdaki verilerin yenileme hızına 200 Hz sınırı yerleştirir. Uygulamanızın algılayıcı hızını kullanarak algılayıcı verilerini toplaması Fastest gerekiyorsa, izni bildirmeniz HIGH_SAMPLING_RATE_SENSORS gerekir. İzni aşağıdaki yollarla yapılandırabilirsiniz:

  • Derleme tabanlı izni ekleyin:

    Platforms/Android/MainApplication.cs dosyasını açın ve yönergelerin ardından using aşağıdaki derleme özniteliğini ekleyin:

    [assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
    

    - veya -

  • Android Bildirimini güncelleştirin:

    Platforms/Android/AndroidManifest.xml dosyasını açın ve düğüme aşağıdaki satırı manifest ekleyin:

    <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
    

    - veya -

  • Bildirim düzenleyicisinde Android Bildirimi'ni güncelleştirin:

    Visual Studio'da Platformlar/Android/AndroidManifest.xml dosyasına çift tıklayarak Android bildirim düzenleyicisini açın. Ardından Gerekli izinler'in altında HIGH_SAMPLING_RATE_SENSORS iznini denetleyin. Bu, AndroidManifest.xml dosyasını otomatik olarak güncelleştirir.

Dekont

Bir kullanıcı cihaz geçişlerini kullanarak mikrofon erişimini kapatırsa, izin bildirip bildirmediğinize bakılmaksızın hareket ve konum algılayıcıları her zaman hız sınırına sahiptirHIGH_SAMPLING_RATE_SENSORS.

Jiroskop sensörünü izleme

Jiroskop algılayıcısını izlemeye başlamak için yöntemini çağırın IGyroscope.Start . .NET MAUI, olayı yükselterek IGyroscope.ReadingChanged uygulamanıza jiroskop veri değişiklikleri gönderir. Bu olay tarafından sağlanan veriler rad/sn (saniye başına radyan) cinsinden ölçülür. Algılayıcının izlenmesini IGyroscope.Stop durdurmak için yöntemini kullanın. Jiroskop'un izleme durumunu özelliğiyle IGyroscope.IsMonitoring algılayabilirsiniz. Bu durum, jiroskop başlatıldıysa ve şu anda izleniyorsa olur true .

Aşağıdaki kod örneğinde jiroskop izleme gösterilmektedir:

private void ToggleGyroscope()
{
    if (Gyroscope.Default.IsSupported)
    {
        if (!Gyroscope.Default.IsMonitoring)
        {
            // Turn on gyroscope
            Gyroscope.Default.ReadingChanged += Gyroscope_ReadingChanged;
            Gyroscope.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off gyroscope
            Gyroscope.Default.Stop();
            Gyroscope.Default.ReadingChanged -= Gyroscope_ReadingChanged;
        }
    }
}

private void Gyroscope_ReadingChanged(object sender, GyroscopeChangedEventArgs e)
{
    // Update UI Label with gyroscope state
    GyroscopeLabel.TextColor = Colors.Green;
    GyroscopeLabel.Text = $"Gyroscope: {e.Reading}";
}

Platforma özgü bilgiler (Jiroskop)

Jiroskop sensörüyle ilgili platforma özgü bir bilgi yoktur.

Manyetometre

Manyetometre algılayıcısı, cihazın Dünya'nın manyetik alanına göre yönünü gösterir.

Arabirim IMagnetometer , sensöre erişim sağlar ve özelliği aracılığıyla Magnetometer.Default kullanılabilir. IMagnetometer Hem arabirim hem Magnetometer de sınıf ad alanında Microsoft.Maui.Devices.Sensors yer alır.

Başlarken

Manyetometre işlevine erişmek için aşağıdaki platforma özgü kurulum gerekebilir:

Uygulamanız Android 12+'yi (API 31+) hedeflediyse sistem, bu algılayıcıdaki verilerin yenileme hızına 200 Hz sınırı yerleştirir. Uygulamanızın algılayıcı hızını kullanarak algılayıcı verilerini toplaması Fastest gerekiyorsa, izni bildirmeniz HIGH_SAMPLING_RATE_SENSORS gerekir. İzni aşağıdaki yollarla yapılandırabilirsiniz:

  • Derleme tabanlı izni ekleyin:

    Platforms/Android/MainApplication.cs dosyasını açın ve yönergelerin ardından using aşağıdaki derleme özniteliğini ekleyin:

    [assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
    

    - veya -

  • Android Bildirimini güncelleştirin:

    Platforms/Android/AndroidManifest.xml dosyasını açın ve düğüme aşağıdaki satırı manifest ekleyin:

    <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
    

    - veya -

  • Bildirim düzenleyicisinde Android Bildirimi'ni güncelleştirin:

    Visual Studio'da Platformlar/Android/AndroidManifest.xml dosyasına çift tıklayarak Android bildirim düzenleyicisini açın. Ardından Gerekli izinler'in altında HIGH_SAMPLING_RATE_SENSORS iznini denetleyin. Bu, AndroidManifest.xml dosyasını otomatik olarak güncelleştirir.

Dekont

Bir kullanıcı cihaz geçişlerini kullanarak mikrofon erişimini kapatırsa, izin bildirip bildirmediğinize bakılmaksızın hareket ve konum algılayıcıları her zaman hız sınırına sahiptirHIGH_SAMPLING_RATE_SENSORS.

Manyetometre sensörünü izleme

Manyetometre sensörünü izlemeye başlamak için yöntemini çağırın IMagnetometer.Start . .NET MAUI, olayı yükselterek manyetometre veri değişikliklerini IMagnetometer.ReadingChanged uygulamanıza gönderir. Bu olay tarafından sağlanan veriler $μT$ (mikrotesla) cinsinden ölçülür. Algılayıcının izlenmesini IMagnetometer.Stop durdurmak için yöntemini kullanın. Manyetometrenin izleme durumunu özelliğiyle IMagnetometer.IsMonitoring algılayabilirsiniz. Bu durum, manyetometrenin başlatılıp başlatılmadığı ve şu anda izleniyor olması durumunda olacaktır true .

Aşağıdaki kod örneği manyetometrenin izlenmesini gösterir:

private void ToggleMagnetometer()
{
    if (Magnetometer.Default.IsSupported)
    {
        if (!Magnetometer.Default.IsMonitoring)
        {
            // Turn on magnetometer
            Magnetometer.Default.ReadingChanged += Magnetometer_ReadingChanged;
            Magnetometer.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off magnetometer
            Magnetometer.Default.Stop();
            Magnetometer.Default.ReadingChanged -= Magnetometer_ReadingChanged;
        }
    }
}

private void Magnetometer_ReadingChanged(object sender, MagnetometerChangedEventArgs e)
{
    // Update UI Label with magnetometer state
    MagnetometerLabel.TextColor = Colors.Green;
    MagnetometerLabel.Text = $"Magnetometer: {e.Reading}";
}

Platforma özgü bilgiler (Manyetometre)

Manyetometre sensörüyle ilgili platforma özgü bir bilgi yoktur.

Hizalama

Yönlendirme algılayıcısı bir cihazın yönlendirmesini 3B alanda izler.

Dekont

Bu algılayıcı, cihazın video ekranının dikey mi yoksa yatay modda mı olduğunu belirlemek için kullanılmaz. DeviceDisplay.Current.MainDisplayInfo.Orientation Bunun yerine özelliğini kullanın. Daha fazla bilgi için bkz . Cihaz görüntüleme bilgileri.

Arabirim IOrientationSensor , sensöre erişim sağlar ve özelliği aracılığıyla OrientationSensor.Default kullanılabilir. IOrientationSensor Hem arabirim hem OrientationSensor de sınıf ad alanında Microsoft.Maui.Devices.Sensors yer alır.

Yönlendirme algılayıcısını izlemeye başlamak için yöntemini çağırın IOrientationSensor.Start . .NET MAUI, olayı yükselterek yönlendirme verisi değişikliklerini IOrientationSensor.ReadingChanged uygulamanıza gönderir. Algılayıcının izlenmesini IOrientationSensor.Stop durdurmak için yöntemini kullanın. Yönlendirmenin izleme durumunu özelliğiyle IOrientationSensor.IsMonitoring algılayabilirsiniz. Bu durum, true yönlendirmenin başlatılıp başlatılmadığı ve şu anda izleniyor olmasıdır.

Aşağıdaki kod örneğinde yönlendirme algılayıcısının izlenmesi gösterilmektedir:

private void ToggleOrientation()
{
    if (OrientationSensor.Default.IsSupported)
    {
        if (!OrientationSensor.Default.IsMonitoring)
        {
            // Turn on orientation
            OrientationSensor.Default.ReadingChanged += Orientation_ReadingChanged;
            OrientationSensor.Default.Start(SensorSpeed.UI);
        }
        else
        {
            // Turn off orientation
            OrientationSensor.Default.Stop();
            OrientationSensor.Default.ReadingChanged -= Orientation_ReadingChanged;
        }
    }
}

private void Orientation_ReadingChanged(object sender, OrientationSensorChangedEventArgs e)
{
    // Update UI Label with orientation state
    OrientationLabel.TextColor = Colors.Green;
    OrientationLabel.Text = $"Orientation: {e.Reading}";
}

IOrientationSensor okumaları, iki 3B koordinat sistemini temel alarak cihazın yönünü açıklayan bir Quaternion biçiminde geri bildirilir:

Cihazda (genellikle bir telefon veya tablet) aşağıdaki eksenlere sahip bir 3B koordinat sistemi vardır:

  • Pozitif X ekseni dikey modda ekranın sağını gösterir.
  • Pozitif Y ekseni, dikey modda cihazın en üstüne işaret eder.
  • Pozitif Z ekseni ekrandan dışarıyı gösterir.

Dünya'nın 3B koordinat sistemi aşağıdaki eksenlere sahiptir:

  • Pozitif X ekseni Dünya'nın yüzeyine tanjanttır ve doğuya doğru ilerler.
  • Pozitif Y ekseni de Dünya'nın yüzeyine tanjanttır ve kuzeye doğru ilerler.
  • Pozitif Z ekseni Dünya yüzeyine diktir ve yukarı doğru ilerler.

cihazın Quaternion koordinat sisteminin Dünya'nın koordinat sistemine göre dönüşünü açıklar.

Değer Quaternion , eksen etrafında döndürmeyle yakından ilişkilidir. Döndürme ekseni normalleştirilmiş vektör ($a_x, a_y, a_z$) ve döndürme açısı $\theta$ ise, quaternion'ın (X, Y, Z, W) bileşenleri şunlardır:

$(a_x \times \sin(\theta/2), a_y \times \sin(\theta/2), a_z \times \sin(\theta/2), \cos(\theta/2))$

Bunlar sağ koordinat sistemleridir, bu nedenle sağ elin başparmağı döndürme ekseninin pozitif yönüne işaret edilmişken, parmakların eğrisi pozitif açıların dönüş yönünü gösterir.

Örnekler:

  • Cihaz, ekranı yukarı bakan bir tabloda düz bir şekilde uzandığında, cihazın üst kısmı (dikey modda) kuzeyi işaret ettiğinde, iki koordinat sistemi hizalanır. Quaternion değeri kimlik quaternion'ını (0, 0, 0, 1) temsil eder. Tüm döndürmeler bu konuma göre analiz edilebilir.

  • Cihaz ekranı yukarı bakan bir tabloda düz ve cihazın üst kısmı (dikey modda) batıya Quaternion dönük olduğunda değer (0, 0, 0, 0,707, 0,707) olur. Cihaz Dünya'nın Z ekseni etrafında 90 derece döndürüldü.

  • Cihaz dik tutulduğunda, üst (dikey modda) gökyüzüne doğru işaret ettiğinde ve cihazın arkası kuzeye dönük olduğunda, cihaz X ekseni etrafında 90 derece döndürülür. Değer Quaternion : (0,707, 0, 0, 0,707).

  • Cihaz sol kenarı bir tabloda ve üst noktalar kuzeyde olacak şekilde konumlandırılmışsa, cihaz Y ekseni etrafında -90 derece (veya negatif Y ekseni çevresinde 90 derece) döndürülmüştür. Değer Quaternion : (0, -0,707, 0, 0,707).

Platforma özgü bilgiler (Yönlendirme)

Yönlendirme algılayıcısı ile ilgili platforma özgü bir bilgi yoktur.