Die Android-Plattform bietet zwei Sensoren, mit denen Sie die Position eines Geräts bestimmen können: den Geomagnetfeldsensor und den Beschleunigungsmesser. Die Android-Plattform bietet auch einen Sensor, mit dem Sie feststellen können, wie nah sich das Display eines Geräts an einem Objekt befindet (Näherungssensor). Der geomagnetische Sensor und der Näherungssensor sind hardwarebasiert. Meiste Hersteller von Mobiltelefonen und Tablets bieten einen Sensor für geomagnetische Felder. Gleichermaßen Hersteller von Mobiltelefonen verwenden in der Regel einen Näherungssensor, um festzustellen, Smartphone nahe an das Gesicht des Nutzers gehalten wird (z. B. während eines Telefons) aufrufen). Um die Ausrichtung eines Geräts zu bestimmen, können Sie die Messwerte den Beschleunigungsmesser des Geräts und den Sensor für geomagnetische Felder.
Hinweis:Der Ausrichtungssensor wurde in Android 2.2 eingestellt. (API-Level 8) und der Ausrichtungssensortyp wurde in Android 4.4W eingestellt. (API-Level 20).
Mithilfe von Positionssensoren lässt sich die physische Position eines Geräts im Weltkoordinatensystem bestimmen. Sie können beispielsweise das geomagnetische Feld zusammen mit dem Beschleunigungsmesser, um die Position eines Geräts zu bestimmen relativ zum magnetischen Nordpol. Mit diesen Sensoren können Sie auch die Ausrichtung eines Geräts im Bezugssystem Ihrer Anwendung bestimmen. Positionssensoren werden in der Regel nicht verwendet, um Gerätebewegungen wie Schütteln, Neigen oder Vor-/Zurückbewegen zu überwachen. Weitere Informationen finden Sie unter Bewegungssensoren.
Der Sensor für geomagnetische Felder und der Beschleunigungsmesser geben mehrdimensionale Arrays zurück
der Sensorwerte für jede SensorEvent
. Beispiel:
liefert der Sensor für geomagnetische Felder die Werte der geomagnetischen Feldstärke
der drei Koordinatenachsen während eines einzelnen Sensorereignisses. Ebenso gilt:
misst der Beschleunigungsmesser die Beschleunigung, die auf das Gerät während einer
Sensorereignis an. Weitere Informationen zu den von Sensoren verwendeten Koordinatensystemen finden Sie unter Koordinatensysteme von Sensoren. Der Näherungssensor liefert für jedes Sensorereignis einen einzelnen Wert. In Tabelle 1 sind die auf der Android-Plattform unterstützten Positionssensoren zusammengefasst.
Tabelle 1 Positionssensoren, die auf der Android-Plattform unterstützt werden.
Sensor | Sensorereignisdaten | Beschreibung | Maßeinheiten |
---|---|---|---|
TYPE_GAME_ROTATION_VECTOR |
SensorEvent.values[0] |
Rotationsvektorkomponente entlang der x-Achse (x * sin(Θ/2)). | Ohne Einheit |
SensorEvent.values[1] |
Komponente des Rotationsvektors entlang der Y-Achse (y × sin(Θ/2)). | ||
SensorEvent.values[2] |
Komponente des Drehvektors entlang der Z‑Achse (z * sin(θ/2)). | ||
TYPE_GEOMAGNETIC_ROTATION_VECTOR |
SensorEvent.values[0] |
Rotationsvektorkomponente entlang der x-Achse (x * sin(Θ/2)). | Ohne Einheit |
SensorEvent.values[1] |
Komponente des Rotationsvektors entlang der Y-Achse (y × sin(Θ/2)). | ||
SensorEvent.values[2] |
Komponente des Drehvektors entlang der Z‑Achse (z * sin(θ/2)). | ||
TYPE_MAGNETIC_FIELD |
SensorEvent.values[0] |
Geomagnetische Feldstärke entlang der x-Achse. | μT |
SensorEvent.values[1] |
Geomagnetische Feldstärke entlang der Y-Achse. | ||
SensorEvent.values[2] |
Geomagnetische Feldstärke entlang der z-Achse. | ||
TYPE_MAGNETIC_FIELD_UNCALIBRATED |
SensorEvent.values[0] |
Geomagnetische Feldstärke (ohne Harteisenkalibrierung) entlang der x-Achse. | μT |
SensorEvent.values[1] |
Geomagnetische Feldstärke (ohne Harteisenkalibrierung) entlang der y-Achse. | ||
SensorEvent.values[2] |
Geomagnetische Feldstärke (ohne Harteisenkalibrierung) entlang der z-Achse. | ||
SensorEvent.values[3] |
Schätzung der Eisenvorspannung entlang der x-Achse. | ||
SensorEvent.values[4] |
Schätzung der Eisenverzerrung entlang der Y-Achse. | ||
SensorEvent.values[5] |
Schätzung der Magnetfeldabweichung entlang der Z‑Achse. | ||
TYPE_ORIENTATION 1 |
SensorEvent.values[0] |
Azimut (Winkel um die z-Achse) | Grad |
SensorEvent.values[1] |
Neigung (Winkel um die X-Achse). | ||
SensorEvent.values[2] |
Rollen (Winkel um die Y-Achse). | ||
TYPE_PROXIMITY |
SensorEvent.values[0] |
Entfernung vom Objekt2 | cm |
1Dieser Sensor wurde in Android 2.2 (API-Level 8) eingestellt und dieser Sensortyp wurde in Android 4.4W (API-Level 20) eingestellt. Das Sensor-Framework bietet alternative Methoden zum Erfassen eines Geräts Ausrichtung, die in Compute Engine Ausrichtung des Geräts.
2 Einige Näherungssensoren liefern nur binäre Werte für Nah und Fern.
Vektorsensor für die Spieldrehung verwenden
Der Rotationsvektorsensor des Spiels ist identisch mit Drehung Vektorsensor unterlegen, außer dass das geomagnetische Feld nicht verwendet wird. Daher zeigt die Y-Achse nicht nach Norden, sondern auf eine andere Referenz. Diese Referenz darf um denselben Betrag driften wie das Gyroskop um die Z‑Achse.
Da der Rotationsvektorsensor das Magnetfeld nicht nutzt, sind relative Drehungen genauer sind und nicht von Veränderungen des Magnetfelds beeinflusst werden. Verwenden Sie diesen Sensor in einem Spiel, wenn Sie nicht wissen möchten, wo Norden ist, und der normale Drehvektor aufgrund seiner Abhängigkeit vom Magnetfeld nicht Ihren Anforderungen entspricht.
Im folgenden Code wird gezeigt, wie Sie eine Instanz des Standardsensors für den Drehvektor des Spiels abrufen:
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);
Geomagnetischen Drehvektorsensor verwenden
Der Sensor für geomagnetische Rotationsvektoren ähnelt dem Rotationsvektorsensor, aber wird kein Gyroskop verwendet. Die Genauigkeit dieses Sensors ist geringer als die des normalen Drehvektorsensors, aber der Energieverbrauch ist reduziert. Verwenden Sie diesen Sensor nur, wenn Sie Informationen zur Drehung im Hintergrund erfassen möchten, ohne zu viel Akku zu verbrauchen. Dieser Sensor ist am besten geeignet, wenn er in Kombination mit Batching verwendet wird.
Im folgenden Code wird gezeigt, wie Sie eine Instanz des Standardsensors für den geomagnetischen Drehvektor abrufen:
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);
Ausrichtung des Geräts berechnen
Durch die Berechnung der Ausrichtung eines Geräts können Sie die Position des Geräts relativ zum Referenzsystem der Erde (insbesondere zum magnetischen Nordpol) überwachen. Im folgenden Code wird gezeigt, wie die Ausrichtung eines Geräts berechnet wird:
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);
Das System berechnet die Ausrichtungswinkel mithilfe des geomagnetischen Feldsensor in Kombination mit dem Beschleunigungsmesser des Geräts. Mit diesen beiden Hardwaresensoren liefert das System Daten für die folgenden drei Ausrichtungswinkel:
- Azimut (Drehungsgrade um die -z-Achse) Dies ist den Winkel zwischen der aktuellen Kompassrichtung des Geräts und dem magnetischen Norden. Wenn der obere Rand des Geräts magnetisch nach Norden zeigt, ist der Azimut 0 Grad; Wenn die obere Kante nach Süden zeigt, beträgt der Azimut 180 Grad. In ähnlicher Weise Wenn die obere Kante nach Osten zeigt, beträgt der Azimut 90 Grad und wenn die obere Kante nach Osten zeigt nach Westen zeigt, beträgt der Azimut 270 Grad.
- Neigung (Drehwinkel um die X-Achse) Dies ist die Winkel zwischen einer Ebene parallel zum Gerätebildschirm und einer parallelen Ebene auf den Boden. Wenn du das Gerät mit der Unterseite parallel zum Boden hältst am nächsten zu Ihnen nah und neigen Sie die Oberseite des Geräts zum Boden. wird der Neigungswinkel positiv. Wenn Sie das Gerät in die entgegengesetzte Richtung neigen, also den oberen Rand des Geräts vom Boden weg bewegen, wird der Neigungswinkel negativ. Der Wertebereich liegt zwischen -90 und 90 Grad.
- Neigen (Drehungsgrade um die Y-Achse) Dies ist die Winkel zwischen einer Ebene, die senkrecht zum Bildschirm des Geräts ist, und einer Ebene senkrecht zum Boden. Wenn du das Gerät parallel zum Boden hältst mit der Unterkante, die Ihnen am nächsten ist, und die linke Seite des Geräts neigen Richtung Boden wird der Rollwinkel positiv. Wenn Sie das Gerät in die entgegengesetzte Richtung neigen, also den rechten Rand des Geräts in Richtung Boden bewegen, wird der Rollwinkel negativ. Der Wertebereich beträgt -180 Grad auf 180 Grad stellen.
Hinweis: Die Definition der Rollung des Sensors wurde geändert, um der überwiegenden Mehrheit der Implementierungen im Geosensor-System zu entsprechen.
Beachten Sie, dass diese Winkel auf einem anderen Koordinatensystem beruhen als das in der Luftfahrt verwendete (für Gieren, Nicken und Rollen). Im Luftfahrtsystem Die x-Achse verläuft entlang der Längsseite des Flugzeugs, vom Heck zur Nase.
Der Ausrichtungssensor leitet seine Daten durch die Verarbeitung der Rohsensordaten vom Beschleunigungsmesser und vom Sensor für das geomagnetische Feld ab. Aufgrund der umfangreichen Verarbeitung sinkt die Genauigkeit des Ortungssensors. Insbesondere ist dieser Sensor nur dann zuverlässig, wenn der Rollwinkel 0 ist. Daher wurde der Ausrichtungssensor in Android eingestellt.
2.2 (API-Level 8) und der Ausrichtungssensortyp in Android wurde eingestellt
4,4 W (API-Level 20)
Anstatt Rohdaten des Ausrichtungssensors zu verwenden, empfehlen wir,
getRotationMatrix()
verwenden
in Verbindung mit der
getOrientation()
-Methode
wie im folgenden Codebeispiel gezeigt, um Ausrichtungswerte zu berechnen. Dabei können Sie die Methode remapCoordinateSystem()
verwenden, um die Orientierungswerte in den Referenzrahmen Ihrer Anwendung umzuwandeln.
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. } }
Normalerweise müssen Sie die Rohorientierungswinkel des Geräts nicht verarbeiten oder filtern, sondern nur das Koordinatensystem des Sensors in den Referenzrahmen Ihrer Anwendung umwandeln.
Geomagnetisches Feldsensor verwenden
Mit dem Sensor für geomagnetische Felder können Änderungen im Magnetfeld der Erde überwacht werden. Die Der folgende Code zeigt, wie Sie eine Instanz des Standardsensors für geomagnetische Felder abrufen:
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);
Hinweis : Wenn Ihre App auf Android 12 (API-Level 31) oder höher ist, ist dieser Sensor begrenzt.
Dieser Sensor liefert Rohdaten zur Feldstärke (in μT) für jede der drei Koordinatenachsen.
Normalerweise musst du diesen Sensor nicht direkt verwenden. Stattdessen können Sie den Rotationsvektorsensor verwenden, um die Rohrotationsbewegung zu bestimmen, oder den Beschleunigungsmesser und den Geomagnetfeldsensor in Kombination mit der Methode getRotationMatrix()
, um die Rotationsmatrix und die Neigungsmatrix zu erhalten. Sie können diese Matrizen dann mit den Methoden getOrientation()
und getInclination()
verwenden, um Azimut- und geomagnetische Neigungsdaten zu erhalten.
Hinweis: Wenn Sie Ihre App testen, können Sie die Genauigkeit des Sensors verbessern, indem Sie das Gerät in einer Acht geschwenkt halten.
Unkalibrierten Magnetometer verwenden
Das nicht kalibrierte Magnetometer ähnelt dem geomagnetischen Feld
, außer dass das Magnetfeld nicht mit Harteisen kalibriert wird. Die werksseitige Kalibrierung und Temperaturkompensation werden weiterhin auf das Magnetfeld angewendet. Nicht kalibriertes Magnetometer
ist bei der Verarbeitung
schlechter Schätzungen sehr hilfreich. Im Allgemeinen ist geomagneticsensor_event.values[0]
nahe bei uncalibrated_magnetometer_event.values[0] -
uncalibrated_magnetometer_event.values[3]
. Das bedeutet:
calibrated_x ~= uncalibrated_x - bias_estimate_x
Hinweis: Nicht kalibrierte Sensoren liefern Rohdaten und können eine gewisse Abweichung aufweisen. Ihre Messungen enthalten jedoch weniger Sprünge durch Korrekturen, die durch die Kalibrierung angewendet werden. Einige Anwendungen bevorzugen diese nicht kalibrierten Ergebnisse als flüssiger und besser zuverlässig sind. Wenn eine Anwendung beispielsweise versucht, eine eigene Sensorfusion durchzuführen, können Kalibrierungen die Ergebnisse verfälschen.
Neben dem Magnetfeld liefert das nicht kalibrierte Magnetometer auch die geschätzte Magnetfeldabweichung durch hartes Eisen in jeder Achse. Im folgenden Code wird gezeigt, wie Sie eine Instanz des standardmäßigen nicht kalibrierten Magnetometers abrufen:
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);
Näherungssensor verwenden
Mit dem Näherungssensor können Sie feststellen, wie weit ein Objekt von einem Gerät entfernt ist. Die folgenden zeigt Ihnen, wie Sie eine Instanz des Standard-Näherungssensors abrufen:
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);
Der Näherungssensor wird in der Regel verwendet, um zu bestimmen, wie weit der Kopf einer Person vom Gesicht entfernt ist. eines Mobiltelefons (z. B. wenn ein Nutzer einen Anruf tätigt oder entgegennimmt). Meiste Näherungssensoren geben den absoluten Abstand in cm zurück, einige jedoch nur nahe und entfernte Werte.
Hinweis:Bei einigen Gerätemodellen befindet sich der Näherungssensor unterhalb des Bildschirms. Wenn diese Funktion aktiviert ist, während der Bildschirm eingeschaltet ist, kann ein blinkender Punkt auf dem Bildschirm erscheinen. aktiviert.
Im folgenden Code wird gezeigt, wie der Näherungssensor verwendet wird:
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); } }
Hinweis: Einige Näherungssensoren geben Binärwerte zurück, die „nah“ oder „weit“ bedeuten. In diesem Fall meldet der Sensor meist seinen maximalen Bereichswert im entfernten Zustand.
und ein geringerer Wert im Nahbereich. In der Regel ist der Wert für "weit" ein Wert > 5 cm, der Wert kann jedoch variieren
zwischen Sensor und Sensor. Mit der Methode getMaximumRange()
können Sie die maximale Reichweite eines Sensors ermitteln.