kodbankasi http://kodbankasi.org/kodbankasi

Android Sensör Kullanımı

Bir süre ara verdiğimiz android derslerimize kaldığımız yerden devam ediyoruz. Bir önceki makalemizde options menü oluşturma göstermiştim. Şimdiki makalemiz sensörler hakkında olacak ve küçük bir uygulama yapacağız. Öncelikle android uygulamalarında kullanılan sensörlerden kısaca bahsedelim :

  • Sensor.TYPE_ACCELEROMETER : Bu sensör yardımıyla telefonun yatak, dikey ve yükseklik değişimlerini görülebiliyor. Telefon sağa yatarsa değer artar, sola yatarsa değer azalır. Örneğimiz de bu sensör ile ilgili olacak.
  • Sensor.TYPE_GYROSCOPE : Accelerometer gibi eksen değerlerini  döndürür ancak bir farkı vardır. Bu sensörün dönüş değeri derece cinsindendir. Uzaktan uygulama ile kontrol edilen robotlar ve helikopterlerde bu sensör kullanılmaktadır.
  • Sensor.TYPE_LIGHT : Telefonun bulunduğu ortamın aydınlatma değerini veren sensördür.
  • Sensor.TYPE_MAGNETIC_FIELD : Bu sensör adı üzerinde manyetik alan ile ilgili yatay, dikey ve yükseklik olarak 3 değer döndürür.
  • Sensor.TYPE_PRESSURE : Basıncı ölçen sensördür. Ekrana bir baskı uygulandığından KiloPascal cinsinden geri döndüren sensördür.
  • Sensor.TYPE_TEMPERATURE : Temperature sıcaklık anlamına gelmektedir. Ortamdaki sıcaklığı ölçer.
  • Sensor.TYPE_PROXIMITY : Mesafe hesaplamaya yarayan bir sensördür.

Sensörleri kısaca tanıdıktan sonra küçük bir uygulama yazabiliriz. Bu uygulamada 3 adet textview içerisinde Sensor.TYPE_ACCELEROMETER yardımıyla telefonumuzun yatay, dikey ve yükseklik verilerini alacağız.

İlk önce yeni bir proje oluşturun ve içerisine 3 adet textview ekleyin. Bu textview’lere sırasıyla TextX, TextY ve TextZ olarak id atayın ve bunları activity sınıfında tanımlayın. Bu uygulamadaki kilit noktalardan birisi SensorEventListener implement etmemiz. Implement ettikten sonra MainActivity kırmızı olacaktır. Üzerine gelip add Unimplement methods seçeneğini tıklıyoruz ve onAccuracyChanged ile onSensorChanged metodları uygulamamıza ekleniyor. Şu ana kadarki kodlarımız şu şekilde ;

public class MainActivity extends Activity implements SensorEventListener{
float x , y , z;
TextView textx,texty,textz;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textx = (TextView) findViewById(R.id.TextX);
texty = (TextView)findViewById(R.id.TextY);
textz = (TextView)findViewById(R.id.TextZ);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent arg0) {
// TODO Auto-generated method stub
}
}

Bu aşamadan sonra sensör kullanabilmemiz için bir sensorManager tanımlamamız gerekiyor. onCreate() metodu içerisine bir SensorManager tanımlıyoruz ve registerListener ekliyoruz.

sm = (SensorManager) getSystemService(SENSOR_SERVICE);
sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), sm.SENSOR_DELAY_NORMAL);

Bu iki kod sayesinde TYPE_ACCELEROMETER sensörünü kullacağımızı ve hareket sırasındaki hızımızı ayarladık.

Son olarak onSensorChanged metodunun içerisinde oluşturduğumuz TextView’lere sensörden gelen değerleri atamak kaldı.

Bu kodlar ise ;

public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER) {
textx.setText(Float.toString(event.values[0]));
texty.setText(Float.toString(event.values[1]));
textz.setText(Float.toString(event.values[2]));
}

şeklindedir. Sensörden gelen Float değerlerini string olarak Textview’lere atadık. Uygulamamız bu kadar. Telefonunuzda deneyebilirsiniz. Benim telefonumdaki ekran görüntüleri şu şekilde ;


accelerometer sensörü accelerometer uygulamasıandroid sensör kullanımı

 

Java ve xml dosyalarının son hali şu şekildedir.

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/TextX"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/TextY"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/TextX"
android:layout_below="@+id/TextX"
android:layout_marginTop="22dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/TextZ"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/Texty"
android:layout_below="@+id/Texty"
android:layout_marginTop="22dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>

MainActivity.java

package com.Example.accelerometer;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;
public class MainActivity extends Activity implements SensorEventListener{
float x , y , z;
TextView textx,texty,textz;
SensorManager sm = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textx = (TextView) findViewById(R.id.TextX);
texty = (TextView)findViewById(R.id.TextY);
textz = (TextView)findViewById(R.id.TextZ);
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), sm.SENSOR_DELAY_NORMAL);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER) {
textx.setText(Float.toString(event.values[0]));
texty.setText(Float.toString(event.values[1]));
textz.setText(Float.toString(event.values[2]));
}
}
}

Uygulama kaynak kodlarını BURADAN indirebilirsiniz. Bir sonraki makalede görüşmek dileğiyle…

Bir önceki yazımız olan Android Spinner kullanımı başlıklı yazımızı da inceleyebilirsiniz.

15 Yorumlar

  1. Teşekkürler, okul ödevimdi bu hafta sensörler çok yardımcı oldu :)

  2. Çok güzel bir yazı ve örnek olmuş teşekkürler

  3. Titreşim özelliği ile de bir makale yayınlarsanız çok sevinirim, kolay gelsin.

    • En yakın zamanda eklemeyi düşünüyorum, yoğunluğumdan dolayı her zaman ekleyemiyorum malesef.

      İlginize teşekkürler

  4. Çok güzel yazılar ve dersler var. Sizden ricam sqlite ve web service anlatan bir yazı yazmanız. Teşekkür ederim.

  5. Güzel yazılar ele almışsınız. Devamını bekliyoruz, kolay gelsin.

  6. İleri seviye android konularından biridir sensörler. Güzel yazı olmuş, elinize sağlık

  7. Güzel örnekler ve anlaşılır uygulamalar. Teşekkürler

  8. Teşekkürler yazılar için size iletişimden bir mesaj gönderdim, dönüş yaparsanız sevinirim.

  9. Teşekkürler, android derslerine yeni videolar bekliyorum en kısa zamanda. Sayenizde android’e giriş yaptım.

  10. Benimde projemde tamda bu konu geçiyordu çok ama çok teşekkürler her zamanki gibi http://www.kodbankasi.org farkı…

  11. kızılotesi sensör için de yapılabilirmi

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak.

Bu yazı da ilginizi çekebilir !

Modem Wifi şifresi Değiştirme

Ev veya işyerlerine yeni bağlatılan internet hatlarına genel olarak karmaşık bir şifre veya oldukça basit ...