Windows 8 Metro UI'da Accelerometer desteği

0 dakikada yazıldı

22943 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.