Android Sensör kullanımı

Nisan 2, 2012

 

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.

 

 

İyi çalışmalar

 

 

Kaynak Kodları Buradan İndirebilirsiniz

posted in Android by gokhan

Follow comments via the RSS Feed | Yorum yapın | Trackback URL

6 Comments to "Android Sensör kullanımı"

  1. Hakan wrote:

    Merhaba, aynı anda birden fazla servis kullanmamız gerektiğinde, her sensor için ayrı bir sınıf tanımladığımızı düşünün. Bu değerlere nasıl ulaşıp sensörler bilgilerini alabiliriz. Yani hem TYPE_ACCELEROMETER , TYPE_LIGHT sensoru bilgilerini yazdıgımız farklı sınıflardan nasıl çağırabilir. Ben istiyorum ki Ana.java dosyasında isikSensoru.java ve haraketSensoru.java ‘yı kullanabileyim. Dönüş değerlerini nasıl alabilirim ?

  2. gokhan wrote:

    Merhaba,

    İllaki 2 farklı sınıf kullanarak servislerden verileri almak istiyorsa uygulamanda Global sınıfı altında static değişkenler tanımla her sensör’ü yakaladığın kendi sınıfı içerisinde bulduğun değerleri bu global sınıfı içerisindeki static değişkenlere ata anlık olarak daha sonra uygulamanda ne zaman istersen Global altındaki static değişkenleri kullanarak işini halletmiş olursun.Ayrıca 2 farklı sensör için 2 tane sınıf kullanmak zorunda değilsin ama yapmak istersen bu şekilde mantıklı olacaktır.

    Senin örneğin için Global altında public static int isikSensoru = 0; public static int haraketSensoru = 0; tanımla daha sonra sınıf larda ulaştığın anlık sensör değerlerini bu değişkenlere ata ve sensör değerlerine ne zaman ihtiyacın olursa bu static değişkenlere başvurursun.

    İyi çalışmalar

  3. erdogan wrote:

    Gökhan bey merhaba küçük bir heves ile android programlamaya yeni başladım. Programlama bilgim mikroislemciler üzerine var. Uugulamamda video kayit etmek ve bunlari saklamak istiyorum. Ayrica isi degeri ölçüp bunu kullaniciya sunmak istiyorum. Sizin yaptiginiz gibi yapip x y z degiskenleri yerine sadece isi degiskeni kullanarak telefondan isi degeri cekebilirmiyim. Ayrica video kayit olayi ile ilgili yardimci olursaniz cok sevinirim…

  4. gokhan wrote:

    Merhaba,

    Bir uygulama yapmaya başladınmı? eğer başlamadıysan ben senin için sıfırdan birşey yapmam ama sen başladıysan takıldığın her noktada yardımcı olabilirim.

  5. sezen wrote:

    arkadaşlar bir konuda yardımcı olmanızı istıyorum androıd dersinden geçmem lazım da :/ telefonu sallayınca sessize alma uygulamam var ve onun yanında ışık sensörunu kullanmam lazım nasıl olcak acaba???

  6. Şener wrote:

    Gökhan Arkadaşım senden allah razı olsun. androide yeni başladım kursa gidiyorum ama senin burda verdiğin bilgiler süper hayranlıkla okuyorum paylaştığın bilgileri takip ediyorum çok teşekkürler saygılarımı sunarım.

Leave Your Comment

*

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org