Android platformu, bir cihazın konumunu belirlemenize olanak tanıyan iki sensör sağlar: jeomanyetik alan sensörü ve ivme ölçer. Android platform aynı zamanda bir evin yüzeyine ne kadar yakın (yakınlık sensörü olarak bilinir) bir cihazdır. İlgili içeriği oluşturmak için kullanılan jeomanyetik alan sensörü ve yakınlık sensörü donanım tabanlıdır. En sık Cihaz ve tablet üreticileri jeomanyetik alan sensörü sağlamaktadır. Benzer şekilde, cep telefonu üreticileri genellikle cep telefonunun kullanıcının yüzüne ne zaman yakın tutulduğunu (ör. telefon görüşmesi sırasında) belirlemek için bir yakınlık sensörü ekler. Bir cihazın yönünü belirlemek için cihazın ivme ölçerinden ve jeomanyetik alan sensöründen alınan ölçümleri kullanabilirsiniz.
Not: Yön sensörünün desteği Android 2.2'de (API düzeyi 8) ve yön sensörü türünün desteği Android 4.4W'da (API düzeyi 20) sonlandırılmıştır.
Konum sensörleri, cihazın fiziksel konumunu belirlemek için düşünülebilir. Örneğin, bir cihazın manyetik kuzey kutbuna göre konumunu belirlemek için ivme ölçerle birlikte jeomanyetik alan sensörünü kullanabilirsiniz. Bu sensörleri, bir cihazın uygulamanızın referans çerçevesindeki yönünü belirlemek için de kullanabilirsiniz. Konum sensörleri genellikle cihaz hareketini veya titreşim, eğim veya itme gibi hareketleri izlemek için kullanılmaz (daha fazla bilgi için Hareket sensörleri bölümüne bakın).
Coğrafi manyetik alan sensörü ve ivmeölçer, her SensorEvent
için çok boyutlu sensör değeri dizileri döndürür. Örneğin,
jeomanyetik alan sensörü, jeomanyetik alan gücü
üç koordinat ekseninin her biri için ayrı bir zaman çizelgesi oluşturmak üzere kullanılır. Benzer şekilde
ivme ölçer sensörü, 20 dakikada cihaza uygulanan ivmeyi ölçer
sensör olayına bakalım. Sensörler tarafından kullanılan koordinat sistemleri hakkında daha fazla bilgi için
Sensör koordinat sistemleri başlıklı makaleyi inceleyin. Yakınlık sensörü her sensör etkinliği için tek bir değer sağlar. Tablo 1'de, Android platformunda desteklenen konum sensörleri özetlenmiştir.
Tablo 1. Android platformunda desteklenen konum sensörleri.
Sensör | Sensör etkinlik verileri | Açıklama | Ölçü birimleri |
---|---|---|---|
TYPE_GAME_ROTATION_VECTOR |
SensorEvent.values[0] |
x ekseni boyunca dönme vektör bileşeni (x * sin(∧/2)). | Birimsiz |
SensorEvent.values[1] |
Y ekseni boyunca dönme vektörü bileşeni (y * sin(θ/2)). | ||
SensorEvent.values[2] |
Z ekseni boyunca döndürme vektör bileşeni (z * sin(∧/2)). | ||
TYPE_GEOMAGNETIC_ROTATION_VECTOR |
SensorEvent.values[0] |
x ekseni boyunca dönme vektörü bileşeni (x * sin(θ/2)). | Birimsiz |
SensorEvent.values[1] |
Y ekseni boyunca dönme vektörü bileşeni (y * sin(θ/2)). | ||
SensorEvent.values[2] |
Z ekseni boyunca döndürme vektör bileşeni (z * sin(∧/2)). | ||
TYPE_MAGNETIC_FIELD |
SensorEvent.values[0] |
X eksenindeki jeomanyetik alan gücü. | μT |
SensorEvent.values[1] |
Y eksenindeki jeomanyetik alan gücü. | ||
SensorEvent.values[2] |
Z eksenindeki jeomanyetik alan gücü. | ||
TYPE_MAGNETIC_FIELD_UNCALIBRATED |
SensorEvent.values[0] |
x ekseni boyunca jeomanyetik alan gücü (sert demir kalibrasyonu olmadan). | μT |
SensorEvent.values[1] |
y ekseni boyunca jeomanyetik alan gücü (sert demir kalibrasyonu olmadan). | ||
SensorEvent.values[2] |
Z ekseni boyunca jeomanyetik alan gücü (sert demir kalibrasyonu olmadan). | ||
SensorEvent.values[3] |
X ekseni boyunca demir önyargı tahmini. | ||
SensorEvent.values[4] |
Y ekseni boyunca demir önyargı tahmini. | ||
SensorEvent.values[5] |
Z ekseni boyunca demir yangı tahmini. | ||
TYPE_ORIENTATION 1 |
SensorEvent.values[0] |
Azimut (z ekseni etrafındaki açı). | Derece |
SensorEvent.values[1] |
Eğim (x ekseni etrafındaki açı). | ||
SensorEvent.values[2] |
Roll (y ekseni etrafındaki açı). | ||
TYPE_PROXIMITY |
SensorEvent.values[0] |
Nesneye olan mesafe.2 | cm |
1Bu sensörün desteği Android 2.2'de (API düzeyi 8) ve bu sensör türünün desteği Android 4.4W'da (API düzeyi 20) sonlandırılmıştır. Sensör çerçevesi, cihaz yönünü elde etmek için alternatif yöntemler sağlar. Bu yöntemler Cihazın yönünü hesaplama bölümünde açıklanmıştır.
2 Bazı yakınlık sensörleri yalnızca ikili değerler sağlar temsil eder.
Oyun döndürme vektör sensörünü kullanma
Oyunun dönüş vektörü sensörü, Rotasyon vektör sensörü (jeomanyetik alanı kullanmaz). Bu nedenle Y ekseni kuzeyi değil, başka bir referansı gösterir. Bu referansın jiroskopun Z ekseni etrafında kaymasıyla aynı büyüklük sıralamasına sahiptir.
Oyun dönüş vektörü sensörü manyetik alanı kullanmadığından, göreceli dönüşler daha doğrudur ve manyetik alan değişikliklerinden etkilenmez. Kuzeyin nerede olduğunu önemsemiyorsanız ve normal dönme vektörü, manyetik alana bağlı olduğu için ihtiyaçlarınıza uygun değilse bu sensörü oyunlarda kullanın.
Aşağıdaki kodda, varsayılan oyun rotasyonu vektör sensörünün bir örneğinin nasıl alınacağı gösterilmektedir:
Kotlin
private lateinit var sensorManager: SensorManager private var sensor: Sensor? = null ... sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GAME_ROTATION_VECTOR)
Java
private SensorManager sensorManager; private Sensor sensor; ... sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GAME_ROTATION_VECTOR);
Jeomanyetik dönme vektörü sensörünü kullanma
Coğrafi manyetik dönme vektörü sensörü, dönme vektörü sensörüne benzer ancak jiroskop kullanmaz. Bu sensörün doğruluğu normal dönme vektörü sensöründen daha düşüktür ancak güç tüketimi azaltılmıştır. Bu sensörü yalnızca çok fazla pil kullanmadan arka planda döndürme bilgilerini toplamak istiyorsanız kullanın. Bu sensör en çok kullanıldığında faydalıdır birlikte kullanılmasını sağlar.
Aşağıdaki kodda, varsayılan jeomanyetik dönme vektörü sensörünün bir örneğinin nasıl alınacağı gösterilmektedir:
Kotlin
private lateinit var sensorManager: SensorManager private var sensor: Sensor? = null ... sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR)
Java
private SensorManager sensorManager; private Sensor sensor; ... sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR);
Cihazın yönünü hesaplama
Bir cihazın yönünü hesaplayarak cihazın dünyanın referans çerçevesine (özellikle de manyetik kuzey kutbuna) göre konumunu izleyebilirsiniz. Aşağıdaki kodda bir cihazın yön:
Kotlin
private lateinit var sensorManager: SensorManager ... // Rotation matrix based on current readings from accelerometer and magnetometer. val rotationMatrix = FloatArray(9) SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerReading, magnetometerReading) // Express the updated rotation matrix as three orientation angles. val orientationAngles = FloatArray(3) SensorManager.getOrientation(rotationMatrix, orientationAngles)
Java
private SensorManager sensorManager; ... // Rotation matrix based on current readings from accelerometer and magnetometer. final float[] rotationMatrix = new float[9]; SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerReading, magnetometerReading); // Express the updated rotation matrix as three orientation angles. final float[] orientationAngles = new float[3]; SensorManager.getOrientation(rotationMatrix, orientationAngles);
Sistem, cihazın jiroskopuyla birlikte jeomanyetik alan sensörünü kullanarak yön açılarını hesaplar. Bu ikisini kullanmak sistem aşağıdaki üç cihaz için veri sağlar: yön açıları:
- Azimut (-z ekseni etrafındaki dönme dereceleri). Bu, cihazın mevcut pusula yönü ile manyetik kuzey arasındaki açıdır. Cihazın üst kenarı manyetik kuzeye bakıyorsa azimut 0 derece, üst kenarı güneye bakıyorsa azimut 180 derecedir. Aynı şekilde, üst kenar doğuya bakıyorsa azimut 90 derecedir ve üst kenarın üst kenarı 90 derecedir batıya bakarken azimut 270 derecedir.
- Eğim (x ekseni etrafındaki dönme dereceleri). Bu, cihazın ekranına paralel bir düzlem ile zemine paralel bir düzlem arasındaki açıdır. Cihazı zemini tabanına paralel tutarsanız kendinize en yakın kenarını çekin ve cihazın üst kenarını zemine doğru eğin, eğim açısı pozitif hale gelir. Cihazın üst kenarını zeminden uzağa hareket ettirerek cihazı zıt yönde eğmek, eğim açısının negatif olmasına neden olur. Değer aralığı -90 ile 90 derece arasındadır.
- Yuvarla döndürme (y ekseni etrafındaki dönüş dereceleri). Bu, cihazın ekranına dik bir düzlem ile düzlem arasındaki açı hizalanır. Cihazı, alt kenarı size en yakın olacak şekilde yere paralel tutuyor ve cihazın sol kenarını yere doğru eğiyorsanız yuvarlanma açısı pozitif olur. Cihazın sağ kenarını yere doğru hareket ettirerek ters yönde eğildiğinizde rulo açısının negatif olması Değer aralığı -180 derecedir 180 dereceye kadar.
Not: Sensörün yuvarlanma tanımı, coğrafi sensör ekosistemindeki uygulamaların büyük çoğunluğunu yansıtacak şekilde değiştirildi.
Bu açıların, havacılıkta kullanılandan (yaw, pitch ve roll için) farklı bir koordinat sistemiyle çalıştığını unutmayın. Havacılık sisteminde, x ekseni, uçağın uzun kenarı boyunca (kuyruktan buruna) kadardır.
Yön sensörü, ham sensör verilerini işleyerek verilerini türetir
ivme ölçer ve jeomanyetik alan sensöründen alınır. Bu işlem çok fazla işlem gerektirdiğinden, yön sensörünün doğruluğu ve hassasiyeti azalır. Daha açık belirtmek gerekirse bu sensör yalnızca yuvarlanma açısı 0 olduğunda güvenilirdir. Bunun sonucunda, Android 2.2 (API düzeyi 8) sürümünde yön sensörünün ve Android 4.4W (API düzeyi 20) sürümünde yön sensörü türünün desteği sonlandırıldı.
Yönlendirme sensöründen gelen ham verileri kullanmak yerine, aşağıdaki kod örneğinde gösterildiği gibi, yönelme değerlerini hesaplamak için getRotationMatrix()
yöntemini getOrientation()
yöntemiyle birlikte kullanmanızı öneririz. Bu sürecin bir parçası olarak, oryantasyon değerlerini uygulamanızın referans çerçevesine çevirmek için remapCoordinateSystem()
yöntemini kullanabilirsiniz.
Kotlin
class SensorActivity : Activity(), SensorEventListener { private lateinit var sensorManager: SensorManager private val accelerometerReading = FloatArray(3) private val magnetometerReading = FloatArray(3) private val rotationMatrix = FloatArray(9) private val orientationAngles = FloatArray(3) public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager } override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) { // Do something here if sensor accuracy changes. // You must implement this callback in your code. } override fun onResume() { super.onResume() // Get updates from the accelerometer and magnetometer at a constant rate. // To make batch operations more efficient and reduce power consumption, // provide support for delaying updates to the application. // // In this example, the sensor reporting delay is small enough such that // the application receives an update before the system checks the sensor // readings again. sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)?.also { accelerometer -> sensorManager.registerListener( this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL, SensorManager.SENSOR_DELAY_UI ) } sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD)?.also { magneticField -> sensorManager.registerListener( this, magneticField, SensorManager.SENSOR_DELAY_NORMAL, SensorManager.SENSOR_DELAY_UI ) } } override fun onPause() { super.onPause() // Don't receive any more updates from either sensor. sensorManager.unregisterListener(this) } // Get readings from accelerometer and magnetometer. To simplify calculations, // consider storing these readings as unit vectors. override fun onSensorChanged(event: SensorEvent) { if (event.sensor.type == Sensor.TYPE_ACCELEROMETER) { System.arraycopy(event.values, 0, accelerometerReading, 0, accelerometerReading.size) } else if (event.sensor.type == Sensor.TYPE_MAGNETIC_FIELD) { System.arraycopy(event.values, 0, magnetometerReading, 0, magnetometerReading.size) } } // Compute the three orientation angles based on the most recent readings from // the device's accelerometer and magnetometer. fun updateOrientationAngles() { // Update rotation matrix, which is needed to update orientation angles. SensorManager.getRotationMatrix( rotationMatrix, null, accelerometerReading, magnetometerReading ) // "rotationMatrix" now has up-to-date information. SensorManager.getOrientation(rotationMatrix, orientationAngles) // "orientationAngles" now has up-to-date information. } }
Java
public class SensorActivity extends Activity implements SensorEventListener { private SensorManager sensorManager; private final float[] accelerometerReading = new float[3]; private final float[] magnetometerReading = new float[3]; private final float[] rotationMatrix = new float[9]; private final float[] orientationAngles = new float[3]; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // Do something here if sensor accuracy changes. // You must implement this callback in your code. } @Override protected void onResume() { super.onResume(); // Get updates from the accelerometer and magnetometer at a constant rate. // To make batch operations more efficient and reduce power consumption, // provide support for delaying updates to the application. // // In this example, the sensor reporting delay is small enough such that // the application receives an update before the system checks the sensor // readings again. Sensor accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); if (accelerometer != null) { sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL, SensorManager.SENSOR_DELAY_UI); } Sensor magneticField = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); if (magneticField != null) { sensorManager.registerListener(this, magneticField, SensorManager.SENSOR_DELAY_NORMAL, SensorManager.SENSOR_DELAY_UI); } } @Override protected void onPause() { super.onPause(); // Don't receive any more updates from either sensor. sensorManager.unregisterListener(this); } // Get readings from accelerometer and magnetometer. To simplify calculations, // consider storing these readings as unit vectors. @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { System.arraycopy(event.values, 0, accelerometerReading, 0, accelerometerReading.length); } else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { System.arraycopy(event.values, 0, magnetometerReading, 0, magnetometerReading.length); } } // Compute the three orientation angles based on the most recent readings from // the device's accelerometer and magnetometer. public void updateOrientationAngles() { // Update rotation matrix, which is needed to update orientation angles. SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerReading, magnetometerReading); // "rotationMatrix" now has up-to-date information. SensorManager.getOrientation(rotationMatrix, orientationAngles); // "orientationAngles" now has up-to-date information. } }
Genellikle, sensörün koordinat sistemini uygulamanızın referans çerçevesine dönüştürmek dışında, cihazın ham yönelim açıları üzerinde veri işleme veya filtreleme yapmanız gerekmez.
Jeomanyetik alan sensörünü kullanma
Jeomanyetik alan sensörü dünyanın manyetik alanındaki değişiklikleri izlemenize olanak tanır. Aşağıdaki kodda, varsayılan jeomanyetik alan sensörünün bir örneğinin nasıl alınacağı gösterilmektedir:
Kotlin
private lateinit var sensorManager: SensorManager private var sensor: Sensor? = null ... sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager sensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD)
Java
private SensorManager sensorManager; private Sensor sensor; ... sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); sensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
Not: Uygulamanız Android 12'yi (API düzeyi 31) veya daha yeni bir sürümü hedefliyorsa bu sensör hız sınırlıdır.
Bu sensör, üç koordinat ekseninin her biri için ham alan gücü verileri (μT cinsinden) sağlar.
Genellikle bu sensörü doğrudan kullanmanız gerekmez. Bunun yerine, döndürme vektörünü
Sensör kullanarak ham dönme hareketini belirleyebilir veya ivme ölçer ve jeomanyetik alan
yöntemini getRotationMatrix()
yöntemi ile birlikte kullanarak döndürme matrisini ve eğim matrisini elde edebilirsiniz. Ardından, azimut ve jeomanyetik eğim verilerini elde etmek için bu matrisleri getOrientation()
ve getInclination()
yöntemleriyle kullanabilirsiniz.
Not: Uygulamanızı test ederken, sensörün doğruluğunu ölçmek için cihazı 8-8 deseni ile sallayın.
Kalibre edilmemiş manyetometreyi kullanma
Kalibrasyon yapılmamış manyetometre, manyetik alana sert demir kalibrasyonunun uygulanmaması dışında jeomanyetik alan sensörüne benzer. Fabrika kalibrasyon ve sıcaklık dengelemesi, manyetik alana uygulanmaya devam eder. Kalibre edilmemiş manyetometre, kötü sert demir tahminlerini işlemek için kullanışlıdır. Genel olarak geomagneticsensor_event.values[0]
, uncalibrated_magnetometer_event.values[0] -
uncalibrated_magnetometer_event.values[3]
'e yakındır. Yani,
calibrated_x ~= uncalibrated_x - bias_estimate_x
Not: Kalibre edilmemiş sensörler daha fazla ham sonuç sağlar ve bazı sapmaları da içerir, ancak ölçümlerine kalibrasyondur. Bazı uygulamalar, kalibre edilmemiş bu sonuçları daha akıcı ve etkili olduğu için tercih edebilir. yardımcı olur. Örneğin, bir uygulama kendi sensör füzyonunu yapmaya çalışıyorsa Hatta kalibrasyon uygulamak sonuçları bozabilir.
Kalibre edilmemiş manyetometre, manyetik alana ek olarak tahmini sert demir sapması. Aşağıdaki kodda, varsayılan kalibre edilmemiş manyetometre örneğinin nasıl alınacağı gösterilmektedir:
Kotlin
private lateinit var sensorManager: SensorManager private var sensor: Sensor? = null ... sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager sensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED)
Java
private SensorManager sensorManager; private Sensor sensor; ... sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); sensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED);
Yakınlık sensörünü kullan
Yakınlık sensörü, bir nesnenin cihazdan ne kadar uzakta olduğunu belirlemenizi sağlar. Aşağıdaki kodda, varsayılan yakınlık sensörünün bir örneğinin nasıl alınacağı gösterilmektedir:
Kotlin
private lateinit var sensorManager: SensorManager private var sensor: Sensor? = null ... sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY)
Java
private SensorManager sensorManager; private Sensor sensor; ... sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
Yakınlık sensörü genellikle bir kişinin kafasının yüzünün ne kadar uzakta olduğunu belirlemek için kullanılır (örneğin, kullanıcı bir telefon görüşmesi yaparken veya alırken). Çoğu yakınlık sensörü mutlak mesafeyi cm cinsinden döndürür ancak bazıları yalnızca yakın ve uzak değerleri döndürür.
Not: Bazı cihaz modellerinde yakınlık sensörü Bu, ekran açıkken etkinleştirilirse ekranda yanıp sönen bir noktanın görünmesine neden olabilir beklemeye gerek yoktur.
Aşağıdaki kodda yakınlık sensörünün nasıl kullanılacağı gösterilmektedir:
Kotlin
class SensorActivity : Activity(), SensorEventListener { private lateinit var sensorManager: SensorManager private var proximity: Sensor? = null public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) // Get an instance of the sensor service, and use that to get an instance of // a particular sensor. sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager proximity = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY) } override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) { // Do something here if sensor accuracy changes. } override fun onSensorChanged(event: SensorEvent) { val distance = event.values[0] // Do something with this sensor data. } override fun onResume() { // Register a listener for the sensor. super.onResume() proximity?.also { proximity -> sensorManager.registerListener(this, proximity, SensorManager.SENSOR_DELAY_NORMAL) } } override fun onPause() { // Be sure to unregister the sensor when the activity pauses. super.onPause() sensorManager.unregisterListener(this) } }
Java
public class SensorActivity extends Activity implements SensorEventListener { private SensorManager sensorManager; private Sensor proximity; @Override public final void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Get an instance of the sensor service, and use that to get an instance of // a particular sensor. sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); proximity = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); } @Override public final void onAccuracyChanged(Sensor sensor, int accuracy) { // Do something here if sensor accuracy changes. } @Override public final void onSensorChanged(SensorEvent event) { float distance = event.values[0]; // Do something with this sensor data. } @Override protected void onResume() { // Register a listener for the sensor. super.onResume(); sensorManager.registerListener(this, proximity, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { // Be sure to unregister the sensor when the activity pauses. super.onPause(); sensorManager.unregisterListener(this); } }
Not: Bazı yakınlık sensörleri "yakın" veya "uzak"ı temsil eden ikili değerler döndürür. Bu durumda sensör genellikle uzak durumda maksimum menzil değerini, yakın durumda ise daha düşük bir değeri bildirir. Genellikle, uzak değer bir değerdir > 5 cm'dir, ancak bu süre değişiklik gösterebilir
yardımcı olabilir. getMaximumRange()
yöntemini kullanarak bir sensörün maksimum menzilini belirleyebilirsiniz.