Windows 8 Metro UI'da Accelerometer desteği

0 dakikada yazıldı

22956 defa okundu

Düzenle

Tabletlerde Accelerometer kullanımı epey popülar. Bu fikirle yola
çıkarsak tabi ki Windows 8 Metro UI tarafında da Accelerometer
donanımına erişebilmek gerekecek. Bu yazımızda basit bir şekilde
Accelerometer datasını nasıl alırız sorusunun cevabını verecek API'lere
göz atacağız.

[C#]

            Accelerometer BirAccelerometer = Accelerometer.GetDefault();

Hızlıca konuya girelim istedim :) Yukarıdaki bir satır kod sistemdeki
Accelerometer'ın bir reference'ını almamız için yeterli. Eğer bu refence
null / nothing dönerse anlayın ki sistemde bir accelerometer yok.

[C#]

            if (BirAccelerometer!= null)
            {
                BirAccelerometer.ReadingChanged += new TypedEventHandler<Accelerometer
                       
AccelerometerReadingChangedEventArgs
>(ReadingChanged);
            }
            else
            {
                //Accelerometer yok!
            }

Yukarıdaki kodumuzda ilk olarak Accelerometer'ın varlığını kontrol
ettikten sonra hemen ReadingChanged eventine bir listener atarak
Accelerometer'dan yeni değer geldiğinde haberdar olmamızı sağlamış
oluyoruz.

[C#]

        private void ReadingChanged(object sender, AccelerometerReadingChangedEventArgs e)
        {
            Window.Current.CoreWindow.Dispatcher.InvokeAsync(CoreDispatcherPriority.Normal, (s, a) =>
            {
                AccelerometerReading reading = (a.Context as AccelerometerReadingChangedEventArgs).Reading;
                double X = reading.AccelerationX;
                double Y = reading.AccelerationY;
                double Z = reading.AccelerationZ;
            }, this, e);
        }

ReadingChanged event listener'ı içerisinde evente
gelenAccelerometerReadingChangedEventArgs üzerindenContext
property'si ile bir AccelerometerReading nesnesi alabiliyoruz. Bu
nesne içerisindeki X, Y ve Z propertyleri direk Accelerometer'dan gelen
veriyi gösteriyor. Tabi okuma işlemini Dispatcher üzerinden gidip
UIThread'e aktarmamız gerek aksi halde cross-thread hatası alırız.
Reading eventleri UIThread'e düşmediği için bu geçişi yapmamız şart.

[C#]

            BirAccelerometer.Shaken -= new TypedEventHandler<Accelerometer
                                                           
AccelerometerShakenEventArgs
>(Shaken);

Bir diğer güzellik ise yukarıda da görebileceğiniz üzere Shaken
eventi. Tablet'i elinize alıp salladığınızda otomatik olarak bu event
çalışıyor. Böylece sallamaya özel hareketler yapabilirsiniz :)

Son olarak sürekli Accelerometer dinlemeden istediğiniz zaman
Accerometer verisini almak için de aşağıdaki gibi bir yapı
kullanabilirsiniz.

[C#]

                AccelerometerReading OkunanVeri = BirAccelerometer.GetCurrentReading();
                double X = OkunanVeri.AccelerationX;
                double Y = OkunanVeri.AccelerationY;
                double Z = OkunanVeri.AccelerationZ;

Hepinize kolay gelsin!

Bu makale Visual Studio 11 Express for Windows Developer Preview
ve Windows 8 Developer Preview Build 8102 kullanılarak yazılmıştır.