Android ile sensörleri kullanmak

Peker Mert Oksuz
YazılımPortal
Published in
3 min readNov 16, 2012

--

Günümüzde mobil cihazlar sandığımızdan çok daha fazla çevre ile etkileşimli olabiliyor. Android cihazlarımız mikrofon, kamera , pusula , ısı ölçer , parlaklık dedektörleri , ivme ölçer, yer çekim sensörü ile çevresel ve fiziksel özellikleri algılayan sensörler heyecan verici deneyimler sunuyor.

Bu yazımda sizlere androidde mevcut sensörleri tanıtıp onları Sensör Yöneticisi’ni kullanarak nasıl kullanabileceğimizi yüzeysel anlatacağım. Daha sonra ilgimi çeken ve araştırdığım ivme ölçer ve yönelim sensörlerinin detaylarını ve izlenmesini anlatan ikinci bir yazıda planlıyorum. Şimdiki yazımızda sensörleri tanıyıp kullanımlarını basitçe açıklayalım.

Sensör Yöneticisini Kullanmak

Sensör yöneticisi android cihazımızda bulunan sensör donanımını yönetmemizi sağlar. Aşağıdaki kodlarda görüldüğü gibi , Sensor Manager Service ‘e bir bağlantı döndürmek için getSystemService ‘i kullanıyoruz.

String service_name = Cpntext.SENSOR_SERVICE;SensorManager sensorManager = (SensorManager)getSystemService(service_name);Sensor Sınıfına GirişSensor sınıfı; türünü , ismini, üreticisini, doğruluğunu ve kapsamı ile ilgili detayları içerecek şekilde her donanımın özelliklerini açıklamak için kullanılır.Sensor sınıfı, ne tür donanım sensörünün bir sensör nesnesi tarafından temsil edildiğini açıklamak için bir dizi sabit içerir. Bu sabitler Sensor.TYPE_<Sabit> biçimindedir.Desteklenen Android SensörleriAşağıda mevcut olan sensör türlerinin listesi verilmiştir.
  • Sensor.TYPE_ACCELEROMETER mevcut ivmeyi üç eksen doğrultusunda m/s² olarak döndüren üç eksenli bir ivme ölçerdir.
  • Sensor.TYPE_GYROSCOPE mevcut cihaz yönelimini üç eksende derece olarak döndüren bir jiroskopik sensördür.
  • Sensor.TYPE_LIGHT ortam aydınlatmasını lüks olarak açıklayan bir tek değer döndüren bir ortam ışık sensörüdür.
  • Sensor.TYPE_MAGNETIC_FIELD mevcut manyetik alanı üç eksen doğrultusunda mikrotesla olarak bulan bir manyetik alan sensörüdür.
  • Sensor.TYPE_ORIENTATION cihaz yönelimini üç eksende derece olarak döndüren bir yönelim sensörüdür.
  • Sensor.TYPE_PRESSURE cihaz üzerinde etki eden mevcut basıncı KPa (KiloPascal) olarak bir tek değer ile döndüren basınç sensörüdür.
  • Sensor.TYPE_PROXIMITY cihaz ve hedef nesne arasındaki mesafeyi metre olarak gösteren bir yakınlık sensörüdür.
  • Sensor.TYPE_TEMPERATUR sıcaklığı santigrat derece cinsinden döndüren bir termometredir.

Sensörleri Bulmak

Bir cihazda özel bir sensör türünün birden çok uygulaması bulunabilir. Özel bir sensör türünün varsayılan uygulamasını bulmak için Sensör Yöneticisi'nin getDefaultSensors yöntemini yukarıdaki sabitlerden geçirerek kullanabiliriz.Aşağıdaki kod ile varsayılan ışık sensörümüzü bulalım. Eğer bu sensör yoksa ise NULL değeri döner.Sensor defaultLIGHT = sensorManager.getDefaultSensors(Sensor.TYPE_LIGHT);Eğer verilen bir türdeki tüm sensörleri döndürmek istersek  aşağıdaki kodda gösterildiği gibi getSensorList 'i kullanıyoruz.List<sensor> pressureSensors = sensorManager.getSensorList(Sensor.TYPE_PRESSURE);Son olarakta cihaz üzerindeki tüm sensörleri listeletecekseniz aşağıdaki gibi Sensor.TYPE_ALL 'u kullanıyoruz.List<sensor> allSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);

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.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.
  • SensorManager.SENSOR_STATUS_ACCURACY_LOW Sensör’ün düşük doğrlukla bildirim yaptığını ve kalibre edilmeye ihtiyaç duyduğunu gösterir.
  • SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM Sensör verisinin ortalama doğrulukta olduğunu ve kalibre edilerek iyileştirilebiliceğini gösterir.
  • SensorManager.SENSOR_STATUS_ACCURACY_HIGH Sensör’ün mümkün olan en iyi doğrulukta olduğunu gösterir.
  • SensorManager.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.Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
sensorManager.registerListener(mySensorEventListener,
sensor,
SensorManager.SENSOR_DELAY_NORMAL);

Sensör Yöneticisi güncelleme sabitleri

  • SensorManager.SENSOR_DELAY_FASTEST Mümkün olan en hızlı güncelleme oranıdır.
  • SensorManager.SENSOR_DELAY_GAME Oyumlar için en uygun güncelleme oranıdır.
  • SensorManager.SENSOR_DELAY_NORMAL Varsayılan güncelleme oranını seçer.
  • SensorManager.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.Bir sonraki yazımızda Sensör değerlerini okuma ve sensörlerin kullanımıyla ilgili detayları inceleyeceğiz. Daha fazla bilgi edinmek için aşağıdaki bağlantıyı kullanabilirsiniz.http://developer.android.com/guide/topics/sensors/index.html

--

--