Android Sensör kullanımı

Merhaba arkadaşlar , yaklaşık 8 ay kadar önce Android ile uygulama geliştirmeye yeni heveslendiğim dönemde oynadığım bir oyun bana “off be ne oyun yapmışlar ama” dedirtmişti :)  oyunun en can alıcı özelliği ise yönettiğim helikopter’in telefonun hareketlerine göre hareket etmesi idi.Yani ben telefonu öne doğru yatırınca helikopter ileri gidiyor sola yatırınca helikopter sola kaymaya başlıyordu o dönemlerde bu benim çok hoşuma gitmişti.Tahmin edebileceğiniz üzere bu yazının konusu Android ile Sensör’lere erişim ve değerlerini okuma.Sensör detay’larına girmeden belirtmekte fayda gördüğüm bir konuda sensör’lerin telefon’unuzun özelliğine göre desteklenmesidir.

Sensör’lerin başlıcaları şu şekildedir

Sensor.TYPE_ACCELEROMETER
Telefon’unuzun yatay , dikey ve yükseklik değişimlerini veren sensör’dür.Telefon’unuzu düz konumdan sola doğru yatırınca yatay değer artmaya başlıyacaktır tam tersi durumda ise eksi değere düşmeye başlıyacaktır. (m/s2)

Sensor.TYPE_GYROSCOPE
Hemen bir üstteki sensör gibi 3 eksen değerini geri döndürür tek farkı geri dönüş birimi derece cinsindendir.

Sensor.TYPE_LIGHT
Bulunan ortamın aydınlatmasını veren sensör’dür.Geriye tek bir değer döner

Sensor.TYPE_MAGNETIC_FIELD
Cihazınızın içerisinde bulunduğu manyetik alanı yatay,dikey ve yükseklik olarak 3 değer olarak verir.

Sensor.TYPE_PRESSURE
Telefon üzerindeki basıncı KPa(KiloPascal) cinsinden verir

Sensor.TYPE_TEMPERATURE
Santigrat cinsinden sıcaklığı geri döner.

Sensor.TYPE_PROXIMITY
Yakınlık sensör’üdür.Hedef ile cihaz arasındaki mesafeyi hesaplayabilir.

Örnek uygulama olarak telefon’umuzdaki TYPE_ACCELEROMETER sensör’ünden yararlanarak değerlerini okuyup çalışma mantığını tam olarak anlamaya çalışacağız.Örnek uygulamamızı eclipse üzerinde geliştiriyor olacağız ilk olarak Sensor adında bir tane proje oluşturalım ve main.xml dosyamıza 3 tane TextView ekliyelim.Bu aşamada xml kod tarafı kod kalabalığına neden olduğu için burada paylaşmıyorum uygulamanın tüm kaynak kodlarını en alttaki link’ten indirebilirsiniz.SensorActivity.java dosyamıza gidelim


Import’larımızı ekledikten sonra SensorEventListener kullanıyoruz ve hemen altındada global değişkenlerimizi tanımlıyoruz. onCreate method’unda ise sensör’lere ulaşmak için gerekli atama’ları yapıyoruz ve ekrandaki TextView kontrollerimize ulaşıyoruz.Uygulamanın arayüz kısmındaki TextView kontrollerimize tvX,tvY,tvZ id’leri verilmiştir.Bu şekilde yazdığınız zaman sizde hata vermesi lazım ve bu doğaldır çünkü SensorEventListener’ın gerekli method’larını ezmedik hemen onlarıda yazalım



onResume() ve onStop() method’larında hangi sensör’leri kullanacak isek onları belirtiyoruz.Biz uygulamamızda sadece TYPE_ACCELEROMETER ‘i kullanıyor olacağız. onSensorChanged() method’unu sensör’ün o an oluşan değerlerini okumak için kullanıyor olacağız.Burada küçük bir if kontrolünden sonra sensör değerlerimizi TextView kontrollerimizin Text özelliklerine atıyoruz.Yukarıdada belirttiğim gibi TYPE_ACCELEROMETER geriye 3 tane değer dönmektedir bunlar yatay , dikey ve yükseklik bilgileridir.Float tipinde değer döndüğü için Float.toString() içerisinde yazılmıştır.




Son olarak ekran görüntüleri


Telefon yatay konumda masa’nın üzerinde





Telefon’un sol ‘a ve sağ ‘a yatırıldığı zaman burada yatay(x) değeri değişmektedir




Telefon’un öne doğru yatırılması ve geri kaldırılmasında oluşan durum ise dikey(y) değerlerinin değişmesidir




Telefon’u olduğu yerden havaya doğru kaldırılmasında değişen değeri ise z değişkenidir




Dikkat ederseniz telefon masa’nın üzerinde iken z konum değeri 9.91 iken yukarı kaldırdığımda -2.17 oldu.
Google Plus'ta Paylaş

Yazar: Cihat Kılınç

    Blogger Yorumları
    Facebook Yorumları

0 yorum:

Yorum Gönder