Android cihazımız’da çeşitli sensörler bulunmaktadır. Bunları ısı sensörü, yatay, dikey ve yükseklik değişimlerini haberdar eden sensörler, basınç sensörleri, yakınlık sensörleri ya da manyetik alanı haberdar eden sensörler olarak ayırabiliriz.
Başlıca sensörleri tanımlayacak olursak;
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) (Eğer ben yatay kısmı x kısmı sallarsam değiştirirsem telefon sallanmış kabul edilir. )
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.
Sensörleri Kullanmak
Öncelikle bir Sensor Eylem Dinleyicisi oluşturuyoruz. Sensör değerlerini izlemek için onSensorChanged yöntemini ve Sensor doğruluğundaki değişikliklere tepki vermek içinde onAccuracyChanged yöntemini kullanıyoruz.
|
1 2 3 4 5 6 7 8 9 |
final SensorEventListener mySensorEventListener = new SensorEventListener(){ public void onSensorChanged(SensorEvent sensorEvent){ //Sensor değişikliğini izlediğimiz kısım } // public void onAccuracyChanged(Sensor sensor, int accuracy){ //Sensor doğruluğundaki değişikliklerine bir tepki oluşturucaz. } }; |
onSensorChanged yöntemindeki SensorEvent parametresi bir sensör eylemini açıklamak için dört özellik içerir.
- sensor Eylemi tetikleyen sensör nesnesi.
- accuracy Sensör’ün eylem tetiklendiği andaki doğruluğu.
- values Algılanan yeni değerleri içeren bir float dizisi.
- timestamp Sensör eyleminin gerçekleştiği zaman.
Bir sensörün doğruluğundaki değişiklikleri onAccuracyChanged yöntemini kullanarak izleyebiliriz.Bu yöntemde accuracy değeri aşağıdaki sabitlerden birini kullanarak izlenen sensörün doğruluğundan geri bildirimi temsil etmektedir.
- SENSOR_STATUS_ACCURACY_LOW Sensör’ün düşük doğrlukla bildirim yaptığını ve kalibre edilmeye ihtiyaç duyduğunu gösterir.
- SENSOR_STATUS_ACCURACY_MEDIUM Sensör verisinin ortalama doğrulukta olduğunu ve kalibre edilerek iyileştirilebiliceğini gösterir.
- SENSOR_STATUS_ACCURACY_HIGH Sensör’ün mümkün olan en iyi doğrulukta olduğunu gösterir.
- SENSOR_STATUS_ACCURACY_UNRELIABLE Sensör verirsinin güvenilir olmadığını yani kalibrasyon gerektiğini yada okumaların mümkün olmadığını gösterir.
Aşağıdaki örnek ile varsayılan yakınlık sensör’ü için , normal güncelleme oranında, bir sensör eylem dinleyicisi’ni kaydettirir.
|
1 2 3 4 |
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); sensorManager.registerListener(mySensorEventListener, sensor, SensorManager.SENSOR_DELAY_NORMAL); |
Sensör Yöneticisi güncelleme sabitleri
- SENSOR_DELAY_FASTEST Mümkün olan en hızlı güncelleme oranıdır.
- SENSOR_DELAY_GAME Oyumlar için en uygun güncelleme oranıdır.
- SENSOR_DELAY_NORMAL Varsayılan güncelleme oranını seçer.
- SENSOR_DELAY_UI Kullanıcı arabirimi(UI) özelliklerini güncellemek için uygun bir oran belirler.
Burada seçtiğimiz oranlar kesin değildir. Sensör yöneticisi seçtiğimiz orandan daha hızlı veya daha yavaş çalışabilir. Sensörümüzü uygulamamızda kullanırken güç kaynağımızı tüketmemek adına mümkün olan en uzun aralıkta güncelleme yapmalıyız.
Ayrıca uygulamada güncellemeye ihtiyaç kalmadığında Sensor Eylem Dinleyici kayıtlarını kaldırmamız gereklidir.
sensorManager.unregisterListener(mySensorEventListener);
Sadece aktivite etkin iken kullanılıyor olduklarından emin olmak için, sensör eylem dinleyicisinin kaydetme ve silme işlemlerini onResume ve onPause yöntemleri içerisinde gerçekleştirmemiz gereklidir.
Şimdi bir örnek üzerinde anlatalım..
MainActivity :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends Activity implements SensorEventListener { Sensor accelerometer; SensorManager sm; TextView acceleration; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE); accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sm.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); acceleration = (TextView) findViewById(R.id.acceleration); } protected void onPause() { super.onPause(); sm.unregisterListener(this); } @Override public void onSensorChanged(SensorEvent arg0) { if (arg0.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { float[] values = arg0.values; float x = values[0]; float y = values[1]; float z = values[2]; acceleration.setText("X: " + x + "\nY: " + y + "\nZ: " + z); } } @Override public void onAccuracyChanged(Sensor arg0, int arg1) { // TODO Auto-generated method stub } } |
main_activity.xml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" > <TextView android:id="@+id/acceleration" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="X: \nY: \nZ:" /> </RelativeLayout> |
1 thought on “38-Android Studio Sensörler”
serkan
(10 Şubat 2017 - 11:33)ümit bey merhaba iyi günler sizinle irtibata geçmek istiyorum Android ile iligli bir projem var bu konuda yardımcı olursanız sevinirim
iyi çalışmalar kolay gelsin