Android de sensörler nelerdir , ne işe yararlar ve kullanımı nasıldır

1
3957

Android de sensörler nelerdir , ne işe yararlar ve kullanımı nasıldır

Merhaba arkadaşlar, Bu yazımda sensörleri tanımlıycaz ve herkese kısabir fikir vermek açısından ufak bir tanımlarız.Android telefonlarda sensörlerle çeşitli uygulamalar geliştirebiliriz.Sensör diyince titreşim,gps,ekran ışığı,denge,sıcaklık vs. sayabiliriz.Sensörlerimizin listesi aşağıdaki linkte veya listeden ulaşabilirsiniz.

(http://developer.android.com/reference/android/hardware/Sensor.html)

TYPE_ACCELEROMETER   İvme Ölçer
TYPE_AMBIENT_TEMPERATURE   Ortam Sıcaklığı
TYPE_GRAVITY   Yerçekimi
TYPE_GYROSCOPE   Denge
TYPE_LIGHT   Işık
TYPE_LINEAR_ACCELERATION   Doğrusal İvme
TYPE_MAGNETIC_FIELD   Manyetik Alan
TYPE_ORIENTATION   Yön Belirleme
TYPE_PRESSURE   Basınç
TYPE_PROXIMITY   Yakınlık
TYPE_RELATIVE_HUMIDITY   Nem
TYPE_ROTATION_VECTOR   Dönme Vektörü
TYPE_TEMPERATURE    Sıcaklık

Sensörler android versiyonlarına göre desteği değişebilmektedir.Temel olarak androidde sensörler yeni versiyonunda artarak  gelmektedir.Sensörü kullanmak için ilk sensör class içerisinden yönetici olarak sensör tanımlamamız gerekmetedir.

SensorManager mySensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);

Burada SensorManager tipinde bir sensör nesnesi oluşturuyorum.Bu nesne sistem servis ile context (dışarıdan erişmek için context kullandım.This nesnesinide kullanabilirdim ama context kullanmanızı tavsiye ederim.)Sensor service kullanacağımı belirttim.Burada yöneticimizi oluşturduk.

Sensor myLightSensor = mySensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

Burada Sensor tipinde bir nesne oluşturduk.Bu nesne yukarıda oluşturduğumuz mySensorManager adında oluşturduğumuz nesnenin getDefaultSensor servisi ile sensörlerin listesine erişebiliriz.Telefonumuzda bulunan sensörlerin listesini Sensor. diyince karşımıza gelir.Burada TYPE_LIGHT ile ışık seviyesini ölçen bir sensör uygulaması yapıcaz.

mySensorManager.registerListener(lightSensorEventListener,myLightSensor,
SensorManager.SENSOR_DELAY_FASTEST);

Burada sensörümüzün verileri ne sıklıkla alacağını (Yineleme aralığını) belirtiyoruz.Bunun için registerListener sınıfınını kullanıyoruz.Aşağıda kullanılabilecek sıklıklar vardır.

SENSOR_DELAY_FASTEST  : Sürekli ( Oyun oynarken hareket veya dokunmatik hassasiyeti)
SENSOR_DELAY_GAME        : Sıklıkla ( ihtiyacımızın olduğu anlarda  )
SENSOR_DELAY_NORMAL  : Normal aralıklarla ( Mesela oda sıcaklığını , basınçları ölçerken kullanabiliriz. )

sensörümüzü oluşturduğumuza göre şimdi sıra geldi dinleyicimizi oluşturmaya

SensorEventListener lightSensorEventListener= new SensorEventListener(){

@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}

@Override
public void onSensorChanged(SensorEvent event) {

}};

 

Sensör dinleyicimizi SensorEventListener class’ı ile oluşturuyoruz. Override etmemiz gereken 2 adet fonksiyonu olduğunu görüyoruz peki nedir bu fonksiyonlar açıklayacak olursak :
onAccuracyChanged : Genelde log tutmak amacıyla kullanılır.
onSensorChanged    : Sensör üzerinden gelen bilgilerin tutultuğu fonksiyondur. SensorEvent class’ı altında bir bilgi alır bu bilgi bizim sensörümüzün tüm bilgilerini içermektedir.

onSensorChanged altında SensorEvent class’ı altındaki event float tipinde dönmektedir. Gelen bilgiyi okuyabilmemiz için
event.value[0];
yazmamız gerekmektedir. Bu değer bize ışık seviyesini bildirmektedir.Ben burada TextViewe aktarmak istedim.
Bunları açıkladığımıza göre kendi telefonumda ışık sensörü aşağıdaki yerde bulunmaktadır. Sizde kendi telefonunuzun (destekleyen telefonlarda)
tam olarak nerde olduğunu araştırırsanız bu uygulamanın gerçekleşebildiğini göreceksiniz. :

1 adet TextView uygulamayı gerçekleyebilmek için yeterlidir.

 

uygulamamız.

Main Activity Java kodumuz.

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 {
SensorManager sensorYoneticisi;
Sensor isikSensoru;
TextView sensorBilgisi;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorBilgisi = (TextView)findViewById(R.id.textView2);
sensorBilgisi.setText("Sensor bilgisi alınıyor..");
sensorYoneticisi = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
isikSensoru = sensorYoneticisi.getDefaultSensor(Sensor.TYPE_LIGHT);
sensorYoneticisi.registerListener(sensorDinleyicisi,isikSensoru,
SensorManager.SENSOR_DELAY_FASTEST);
}
SensorEventListener sensorDinleyicisi = new SensorEventListener(){
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType()==Sensor.TYPE_LIGHT){
sensorBilgisi.setText("Işık Sensör Seviyesi:"+ String.valueOf(event.values[0]));
}
}};
}

 

Activity main dosyamız.

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" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginBottom="78dp"
android:layout_marginLeft="26dp"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall" />
</RelativeLayout>
Android manifest dosyamız.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sicaklik"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

ve şimdide çalıştırıp sonuçları gözlemleyebiliriz.

1 YORUM

CEVAP VER

Time limit is exhausted. Please reload CAPTCHA.