Android & Android Tablet Pc'ler

Oryantasyon ve Pusula Sensörleri (orientation and compass sensors)

Önceki başlık Sonraki başlık Aşağa gitmek

Oryantasyon ve Pusula Sensörleri (orientation and compass sensors)

Mesaj tarafından Admin Bir Çarş. Haz. 30, 2010 12:49 am

Yeni nesil mobil cihazlarda artık standart olarak bulunan sensörler sayesinde, elimizdeki küçük cihazlara mükemmel bir işlevsellik ve görsellik katıldığını söylesek, sanırım yanlış bir tabir kullanmış olmayız. Sensörler sayesinde; pusula, oyun kontrolleri, telefon konumuna göre değişen kullanıcı arayüzleri gibi uygulamalar geliştirilebilir.

Android; orientation (cihazın boşluktaki konumu), accelerometer (ivme), light (ışık), magnetic field (manyetik sensörü), proximity (yakınlık), temprature (sıcaklık) sensörlerini destekliyor. (Bu sensörler yazılımsal olarak android tarafından desteklenmektedir fakat bunları telefonunuzda kullanmak için, telefonunuzun da bu özelliklere destek verecek donanımsal niteliğe sahip olması gerekir.)

Bende bu yazımda, android sensörlerinden orientation ile ilgili bir örnek yapacağım. Yani, android telefonumuzun konumunu, açısını ve sayısal olarak pusula verisini görebileceğiz. Ben bi android programcısı olarak sensörlerle çalışmaktan zevk alıyorum, emin olun sizde bundan çok hoşlanacaksınız:) Şimdi, kod örneğine geçmeden önce aşağıdakileri resimleri iyi kavramak gerekiyor. Orientation sensöründe 3 farklı değer bulunuyor. Bunlar; X, Y, Z değerleri.

X => Azimuth, telefonun ekran kısmının güney ile yaptığı açı azimuth’dur. Ya da diğer bir ifade ile, telefonun arka kapak bölümü kuzeye bakında, X değeri SIFIR olur. Aşağıdaki resimden daha iyi anlayabilirsiniz.



Y => Pitch değeri, telefonun düzlem ile yaptığı açıdır. Mesela, telefon arka kapağı üzerine masaya bırakılırsa, Y = 0, ekranı üzerine masaya bırakılırsa, Y = -/+ 180 olarak değer alır.



Z => Roll, telefonun dönme açısı. Telefon dik konumdayken, hehrangi bir dönme hareketi yapmadığından Z = 0, sağa dönüşlerde negatif dönme açısı, sola dönüşlerde pozitif dönme açısı yapar.



Kod:
public class SensorExample extends Activity implements SensorListener

SensorListener bize public void onAccuracyChanged(int sensorID, int accuracy) ve public void onSensorChanged(int pSensor, float[] values) fonksiyonlarını implemente etmemizi söylüyor. Sensörlere dair ilgili bilgiler bu iki fonksiyon aracılığı ile bize ulaşacak. onAccuracyChanced() sensörlerin çalışmasında aslında pek bir görevi yok diyebiliriz. Bu konudaki yabancı sitelerde bu konuyla ilgili örnekleri incelediğimde bu fonksiyonun genelde log tutmak için kullanıldığını gördüm.

onSensırChanged() fonksiyonu sayesinde ilgilendiğimiz sensöre dair bilgileri alacağız. Burada float arrayi şeklinde tanımlanmış olan values değişkeninin elemanlarının sahipleri şu şekildedir; values[0] = azimuth, values[1] = pitch, values[2] = roll. Bu değerleri array indexini okuyarak öğreniyoruz ve kullanmak istediğimiz yerlerde sensör değeri olarak kullanıyoruz.

Androis Sensor API’sı bi çok sensörü desteklediğini daha önce belirtmiştim. Biz sensor olarak, yukarıdaki açıklaması yapılanı yani orientation sensörü seçip, kullanacağız. Bunun için kendi unique integer ID’sini bu şekilde belirtiyoruz.

Kod:
private int sensor = SensorManager.SENSOR_ORIENTATION;

Telefonun donanımından, sensörlere ulaşmak için önce bir sensor manager tanımlıyoruz ve altındaki satırı gerçek sensor managera ulaşmak için kullanıyoruz;

Kod:
private SensorManager sensorManager;
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

Önemli Not 1: Kodlar android emulator üzerinde direk çalışmayacaktır, telefona yükleyerek çalıştırabilirsiniz. Sensor similasyonu için openIntent is minde bir eklenti olduğunu duymuştum, araştırabilirsiniz.

Önemli Not 2: Telefonunuzun Settings > sound&display > orientation özelliği kapalı yada açık olması elde ettiğiniz pitch ve roll değerlerinin farklı olmasına neden olur. Mesela, bu özellik kapalı ise; pitch ve roll değeri yukarıda anlatılan resmin %100 aynısıdır. Fakat, eğer orientation özelliği açık ise, telefonunuzu (tıpkı mesaj yazar gibi) yana yatırdığınızda, otomatik orientation özelliğinden dolayı, pitch değeri roll değeri ile ve roll değeri pitch değer yer değiştirir.Bu durumun ilk etapta kafanızı karıştırmasını önlemek için orientation özelliğini kapatmanızı öneririm yada values[] değerlerini alırken, 0-1-2 yerine 3-4-5 indexlerini kullanırsanız, telefonun orientation’ı değişse bile elinizdeki verilerin yerleri değişmeyecektir.

Orientation Sensöre ait çalışır bir demoyu apk formatında buradan indirip, telefonunuzda hemen deneyebilirsiniz.

Orientation Sensore ait kaynak kodları burdanindirebilirsiniz
avatar
Admin
Admin

Mesaj Sayısı : 269
Kayıt tarihi : 18/06/10
Yaş : 27
Nerden : Mersin

Kullanıcı profilini gör http://android.turkforumpro.com

Sayfa başına dön Aşağa gitmek

Önceki başlık Sonraki başlık Sayfa başına dön


 
Bu forumun müsaadesi var:
Bu forumdaki mesajlara cevap veremezsiniz