Sensörler
Bazı Akıllı Telefon Sensörleri 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.
Sensörlere Ulaşma Sistem servisleri aşağıdaki komutla elde edilebilir: SensorManager sensyonet = (SensorManager)getSystemService(Context.SENSOR_SERVICE); Bir sensöre aşağıdaki gibi ulaşılabilir: Sensor sensor = sensyonet.getdefaultsensor(sensor.type_light);
Sensörlere Ulaşma
SensorEventListener sınıfı bizden aşağıdaki metotların kodlanmasını talep ediyor. Bu metotlar sensörden gelen bilgileri anlık olarak (SensorManager.SENSOR_DELAY_NORMAL peryotları ile) dinlememizi sağlıyor. public class MainActivity extends Activity implements SensorEventListener { private SensorManager sensormanager; protected void oncreate(bundle savedinstancestate) { sensormanager = (SensorManager) getsystemservice(sensor_service); sensormanager.registerlistener(this, sensormanager.getdefaultsensor( Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); public void onaccuracychanged(sensor sensor, int accuracy) { public void onsensorchanged(sensorevent event) { // sensörün durumu değiştiğinde
Register/Unregister sensör event Bir sensörü devre almak (dinlemeye almak) veya devreden çıkartmak Sensörü Dinlemeye alma public boolean registerlistener( SensorEventListener listener, Sensor sensor, int rate) Sensörü Dinlemeyi bırakma public void unregisterlistener( SensorEventListener listener, Sensor sensor)
SENSOR_DELAY değişkeni sensörün duyarlılığını belirler. Burada kullanabileceğimiz değerler aşağıdaki gibidir: SENSOR_DELAY_NORMAL - Kullanıcının basit hareketlerini düşük duyarlılıkla takip eder. (215-230 ms) SENSOR_DELAY_FASTEST Sensörden gelen hareketlerin mümkün olduğu kadar fazla kısmının değerlendirilmesini sağlar. (15-20 ms) SENSOR_DELAY_GAME Oyun uygulamaları için yüksek duyarlılıkla dinleme gerçekleştirir. (35-40 ms) SENSOR_DELAY_UI Normal kullanım için idealdir. (85-90 ms) https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-401/androidde-sensor-kullanimi
Sensörü Dinlemek Sensörden gelen veri onsensorchanged metodu içerisinde event değişkeni üzerinden gönderilir. Örneğin: Accelerometer adlı sensör bize telefonun x, y ve z ekseni üzerinde yaptığı hareketleri aşağıdaki şekilde verir: public void onsensorchanged(sensorevent event) { if (event.sensor.gettype() == Sensor.TYPE_ACCELEROMETER) { float[] values = event.values; float x = values[0]; float y = values[1]; float z = values[2]; Log.d("Sensör verisi", String.format("x : %f y : %f z : %f", x, y, z)); https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-401/androidde-sensor-kullanimi
Verileri EditTextX, EditTextY,EditTextZ ye almak public void onsensorchanged(sensorevent event) { 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]));
Sensörü kaydettikten sonra Activity yi ondestroy metodu içerisinde yok etmeyi unutmamalıyız. protected void ondestroy() { super.ondestroy(); sensormanager.unregisterlistener(this); https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-401/androidde-sensor-kullanimi
KONUM BELİRLEME GPS Provider (GPS uydularına göre konum belirleme) Network Provider (Wifi İnternet bağlatısı ile konum belirleme Passive Provider (Baz istasyonları ile onum belirleme)
LocationListener metodları ve görevleri LocationListener konumdinleyicisi = new LocationListener() { public void onstatuschanged(string provider, int status, Bundle extras) { public void onproviderenabled(string provider) { public void onproviderdisabled(string provider) { public void onlocationchanged(location loc) { ; onlocationchanged fonksiyonumuz ile bunu sağlayacağız. Konum bilgilerimiz: Latitude = Enlem Longtitude = Boylam onlocationchanged : GPS ten alınan konum bilgilerini içerir. onstatuschanged : GPS Servisinin durum bilgisi onproviderenable : GPS in aktif duruma getirildiği bilgisi onproviderdisable : GPS in pasif duruma getirildiği bilgisi
Location Manager Yöntemleri GPS Provider (GPS uydularına göre konum belirleme) android.permission. ACCESS_FINE_LOCATION android.permission. ACCESS_COARSE_LOCATION Network Provider (Wifi İnternet bağlatısı ile konum belrleme android.permission. ACCESS_COARSE_LOCATION Passive Provider (Baz istasyonları ile onum belirleme) android.permission.access_fine_location
Implement LocationListener abstract void onlocationchanged(location location) abstract void onproviderdisabled(string provider) abstract void onproviderenabled(string provider) abstract void onstatuschanged(string provider, int status, Bundle extras)
public void onlocationchanged(location location) public void onlocationchanged(location location) { latitudevalue.settext(string.valueof(location.getlatitude())); longitudevalue.settext(string.valueof(location.getlongitude())); providervalue.settext(string.valueof(location.getprovider())); accuracyvalue.settext(string.valueof(location.getaccuracy()));
onstatuschanged() Status Values LocationProvider.OUT_OF_SERVICE The LocationProvider is currently offline and probably will not come back online anytime soon. LocationProvider.TEMPORARILY_UNAVAILABLE The LocationProvider is currently offline and should come back online soon. LocationProvider.AVAILABLE The LocationProvider is currently online.
AndroidManiFast.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.fmi.retina.myapplication" > <uses-permission android:name="android.permission.access_fine_location"/> <uses-permission android:name="android.permission.access_coarse_location"/> <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > <activity android:name=".mainactivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest>
public class MainActivity extends Activity { protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); final String gpsacildi = "GPS Acıldı"; final String gpskapatildi = "GPS Kapalı"; GPS verisi almak final TextView konumtext = (TextView)findViewById(R.id.textview1); LocationManager konumyoneticisi = (LocationManager)getSystemService(Context.LOCATION_SERVICE); LocationListener konumdinleyicisi = new LocationListener() { public void onstatuschanged(string provider, int status, Bundle extras) { public void onproviderenabled(string provider) { Toast.makeText(getApplicationContext(), gpsacildi, Toast.LENGTH_SHORT).show(); konumtext.settext("gps Veri bilgileri Alınıyor..."); public void onproviderdisabled(string provider) { Toast.makeText( getapplicationcontext(),gpskapatildi,toast.length_short).show(); konumtext.settext("gps Bağlantı Bekleniyor..."); public void onlocationchanged(location location) { location.getlatitude(); location.getlongitude(); String Text = "Bulunduğunuz konum bilgileri : \n" +"Latitud = " + loc.getlatitude() +"\nlongitud = "+ loc.getlongitude(); konumtext.settext(text); ; konumyoneticisi.requestlocationupdates(locationmanager.gps_provider, 0, 0, konumdinleyicisi);
Önceki slayttaki kodların MAKÜ TBMYO 301 nolu odanın pencere önünde çalıştırılmasıyla elde edilen konum bilgileri aşağıdaki gibidir.
SORU Telefonu Sallayınca 1-49 arası 6 adet birbirinden farkılı sayı türetilecek
ÇÖZÜM
public class uc extends Activity implements SensorEventListener { TextView tv; Button b1; private SensorManager sensormanager; private Vibrator vibrator; private float last_x, last_y, last_z = 0; EditText textx,texty,textz; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_uc); tv = (TextView) this.findviewbyid(r.id.textview1); b1 = (Button) findviewbyid(r.id.button1); textx=(edittext)findviewbyid(r.id.edittext1); texty=(edittext)findviewbyid(r.id.edittext2); textz=(edittext)findviewbyid(r.id.edittext3); sensormanager = (SensorManager) getsystemservice(sensor_service); sensormanager.registerlistener(this, sensormanager.getdefaultsensor(sensor.type_accelerometer), SensorManager.SENSOR_DELAY_NORMAL); vibrator=(vibrator) getsystemservice(context.vibrator_service);
public void onsensorchanged(sensorevent event) { float sayi=0; if (event.sensor.gettype() == Sensor.TYPE_ACCELEROMETER) { float[] values = event.values; float x = values[0]; float y = values[1]; float z = values[2]; if (z*last_z < 0) { vibrator.vibrate(500); Log.d("MainActivity", String.format("x : %f y : %f z : %f", x, y, z)); textx.settext(«"+x);texty.settext(«"+y);textz.settext(«"+z); if((x*x)>10) Turet();
public void onaccuracychanged(sensor sensor, int accuracy) { public void Klikle(View v) { // long [] sure={500,300,100,400,800; // titreşim deseni milisaniye // vibrator.vibrate(sure, 3); // desen 3 kez tekraralanacak // Random r= new Random(); // int say=r.nextint(49); // tv.settext(" sayı:"); Turet(); public void Turet() { Random r= new Random(); int i=r.nextint(49); tv.settext(" sayı:" + i);
ÖDEV 1. Telefonu x kez sallayıp durdurunca flaşör x kez yanıp sönecek Android programını yazınız. Örneğin telefonu belirli bir hızda (sallama şiddetini siz belirleyiniz) 5 kez sallayınca flaşör 5 kez yanıp sönecek. 2. Gittiğmiz yerlerin koordinatlarını text dosyaya kaydeden GPS Android uygulamasını yazınız.