Zugreifen auf Gerätesensoren
Geräte verfügen über alle Arten von Sensoren, die Ihnen zur Verfügung stehen. Einige Sensoren können Bewegungen erkennen, andere Veränderungen in der Umgebung, z. B. Licht. Die Überwachung und Reaktion auf diese Sensoren macht Ihre App dynamisch, um sich an die Verwendung des Geräts anzupassen. Sie können auch auf Änderungen der Sensoren reagieren und den/die Benutzer*in benachrichtigen. Dieser Artikel enthält eine kurze Übersicht über die gängigen Sensoren, die von .NET Multi-platform App UI (.NET MAUI) unterstützt werden.
Gerätesensorbezogene Typen sind im Microsoft.Maui.Devices.Sensors
-Namespace verfügbar.
Sensorgeschwindigkeit
Die Sensorgeschwindigkeit legt die Geschwindigkeit fest, mit der ein Sensor Daten an Ihre App zurückgibt. Wenn Sie einen Sensor starten, stellen Sie die gewünschte Sensorgeschwindigkeit mit der SensorSpeed-Enumeration bereit:
Fastest
Ruft die Sensordaten so schnell wie möglich ab (in einem UI-Thread ist eine Rückgabe nicht garantiert).Game
Für Spiele geeignete Übertragungsrate (in einem UI-Thread ist eine Rückgabe nicht garantiert).UI
Für allgemeine Benutzeroberflächenaktionen geeignete Übertragungsrate.Default
Für Änderungen der Bildschirmausrichtung geeignete Standardübertragungsrate.
Warnung
Die gleichzeitige Überwachung zu vieler Sensoren kann sich auf die Rate auswirken, mit der Sensordaten an Ihre App zurückgegeben werden.
In .NET 8 sind SensorSpeed-Intervalle auf allen Plattformen identisch:
- Default verwendet ein Intervall von 200 ms.
- UI verwendet ein Intervall von 60 ms.
- Game verwendet ein Intervall von 20 ms.
- Fastest verwendet ein Intervall von 5 ms.
Sensorereignishandler
Bei Ereignishandlern, die Sensoren mit den Geschwindigkeiten Game oder Fastest hinzugefügt wurden, ist die Ausführung im UI-Thread nicht garantiert. Wenn der Ereignishandler auf Elemente der Benutzeroberfläche zugreifen muss, muss er die MainThread.BeginInvokeOnMainThread
-Methode verwenden, um diesem Code im UI-Thread auszuführen.
Beschleunigungsmesser
Der Beschleunigungsmesser misst die Beschleunigung des Geräts an drei Achsen. Die vom Sensor gemeldeten Daten stellen dar, wie der/die Benutzer*in das Gerät bewegt.
Die IAccelerometer-Schnittstelle bietet Zugriff auf den Sensor und ist über die Accelerometer.Default-Eigenschaft verfügbar. Die IAccelerometer
-Schnittstelle sowie die Accelerometer
-Klasse sind im Microsoft.Maui.Devices.Sensors
-Namespace enthalten.
Erste Schritte
Für den Zugriff auf die Beschleunigungsmesser-Funktion ist die folgende plattformspezifische Einrichtung erforderlich.
Wenn Ihre App auf Android 12+ (API 31+) ausgerichtet ist, legt das System eine Grenze von 200 Hz für die Aktualisierungsrate von Daten von diesem Sensor fest. Wenn Ihre App Sensordaten mithilfe der Sensorgeschwindigkeit Fastest sammeln muss, müssen Sie die HIGH_SAMPLING_RATE_SENSORS
-Berechtigung deklarieren. Sie können die Berechtigung auf folgende Weise konfigurieren:
Fügen Sie die assemblybasierte Berechtigung hinzu:
Öffnen Sie die Datei Platforms/Android/MainApplication.cs, und fügen Sie das folgende Assemblyattribut nach
using
-Direktiven hinzu:[assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
- oder -
Aktualisieren Sie das Android-Manifest:
Öffnen Sie die Datei Platforms/Android/AndroidManifest.xml, und fügen Sie die folgende Zeile zum Knoten
manifest
hinzu:<uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
- oder -
Aktualisieren Sie das Android-Manifest im Manifest-Editor:
Doppelklicken Sie in Visual Studio auf die Datei Platforms/Android/AndroidManifest.xml, um den Android-Manifest-Editor zu öffnen. Überprüfen Sie dann unter Erforderliche Berechtigungen die Berechtigung HIGH_SAMPLING_RATE_SENSORS. Dadurch wird die Datei AndroidManifest.xml automatisch aktualisiert.
Hinweis
Wenn ein/eine Benutzer*in den Mikrofonzugriff mithilfe der Geräteumschaltfläche deaktiviert, sind Bewegungs- und Positionssensoren immer im Hinblick auf die Geschwindigkeit eingeschränkt, unabhängig davon, ob Sie die HIGH_SAMPLING_RATE_SENSORS
-Berechtigung deklarieren.
Überwachen des Beschleunigungsmessersensors
Rufen Sie die IAccelerometer.Start-Methode auf, um mit der Überwachung des Beschleunigungsmessersensors zu beginnen. .NET MAUI sendet Änderungen an den Beschleunigungsmesserdaten an Ihre App, indem das IAccelerometer.ReadingChanged-Ereignis ausgelöst wird. Verwenden Sie die IAccelerometer.Stop-Methode, um die Überwachung des Sensors zu beenden. Sie können den Überwachungszustand des Beschleunigungsmessers mit der IAccelerometer.IsMonitoring-Eigenschaft erkennen, die true
ist, wenn der Beschleunigungsmesser gestartet wurde und derzeit überwacht wird.
Im folgenden Codebeispiel wird die Überwachung des Beschleunigungsmessers auf Änderungen veranschaulicht:
public void ToggleAccelerometer()
{
if (Accelerometer.Default.IsSupported)
{
if (!Accelerometer.Default.IsMonitoring)
{
// Turn on accelerometer
Accelerometer.Default.ReadingChanged += Accelerometer_ReadingChanged;
Accelerometer.Default.Start(SensorSpeed.UI);
}
else
{
// Turn off accelerometer
Accelerometer.Default.Stop();
Accelerometer.Default.ReadingChanged -= Accelerometer_ReadingChanged;
}
}
}
private void Accelerometer_ReadingChanged(object sender, AccelerometerChangedEventArgs e)
{
// Update UI Label with accelerometer state
AccelLabel.TextColor = Colors.Green;
AccelLabel.Text = $"Accel: {e.Reading}";
}
Ergebnisse des Beschleunigungsmessers werden in G angegeben. Mit der Einheit G wird eine Gravitationskraft angegeben, die der Kraft des Gravitationsfelds der Erde entspricht $(9,81 m/s^2)$.
Das Koordinatensystem wird relativ zum Bildschirm des Geräts in seiner Standardausrichtung definiert. Die Achsen bleiben unverändert, wenn sich die Bildschirmausrichtung des Geräts ändert.
Die X-Achse ist horizontal und zeigt nach rechts. Die Y-Achse ist vertikal und zeigt nach oben. Die Z-Achse verläuft abgewandt von der Vorderseite des Bildschirms. In diesem System sind Koordinaten hinter dem Bildschirm negative Z-Werte.
Beispiele:
Wenn das Gerät flach auf einem Tisch liegt und auf seiner linken Seite nach rechts geschoben wird, ist der X-Beschleunigungswert positiv.
Wenn das Gerät flach auf einem Tisch liegt, ist der Beschleunigungswert +1,00 G oder (+9,81 m/s^2), was der Beschleunigung des Geräts $(0 m/s^2)$ abzüglich der Gravitationskraft $(+9,81 m/s^2)$ entspricht, was in G normiert wird.
Wenn das Gerät flach auf einem Tisch liegt und nach oben mit einer Beschleunigung von A $m/s^2$ bewegt wird, entspricht der Beschleunigungswert $A+9,81$, was der Beschleunigung des Geräts $(+A m/s^2)$ minus der Gravitationskraft $(–9,81 m/s^2)$ entspricht, was in G normiert wird.
Plattformspezifische Informationen (Beschleunigungsmesser)
Es gibt keine plattformspezifischen Informationen im Zusammenhang mit dem Beschleunigungsmessersensor.
Barometer
Der Barometersensor misst den Umgebungsluftdruck. Die vom Sensor gemeldeten Daten stellen den aktuellen Luftdruck dar. Diese Daten werden gemeldet, wenn Sie den Sensor zum ersten Mal überwachen und dann jedes Mal, wenn sich der Druck ändert.
Die IBarometer-Schnittstelle bietet Zugriff auf den Sensor und ist über die Barometer.Default-Eigenschaft verfügbar. Die IBarometer
-Schnittstelle sowie die Barometer
-Klasse sind im Microsoft.Maui.Devices.Sensors
-Namespace enthalten.
Rufen Sie die IBarometer.Start-Methode auf, um mit der Überwachung des Barometersensors zu beginnen. .NET MAUI sendet Luftdruckwerte an Ihre App, indem das IBarometer.ReadingChanged-Ereignis ausgelöst wird. Verwenden Sie die IBarometer.Stop-Methode, um die Überwachung des Sensors zu beenden. Sie können den Überwachungszustand des Barometers mit der IBarometer.IsMonitoring-Eigenschaft erkennen, die true
ist, wenn das Barometer gestartet wurde und derzeit überwacht wird.
Der Druckwert wird in Hektopascal dargestellt.
Im folgenden Codebeispiel wird die Überwachung des Barometers auf Änderungen veranschaulicht:
public void ToggleBarometer()
{
if (Barometer.Default.IsSupported)
{
if (!Barometer.Default.IsMonitoring)
{
// Turn on barometer
Barometer.Default.ReadingChanged += Barometer_ReadingChanged;
Barometer.Default.Start(SensorSpeed.UI);
}
else
{
// Turn off barometer
Barometer.Default.Stop();
Barometer.Default.ReadingChanged -= Barometer_ReadingChanged;
}
}
}
private void Barometer_ReadingChanged(object sender, BarometerChangedEventArgs e)
{
// Update UI Label with barometer state
BarometerLabel.TextColor = Colors.Green;
BarometerLabel.Text = $"Barometer: {e.Reading}";
}
Plattformspezifische Informationen (Barometer)
In diesem Abschnitt werden plattformspezifische Implementierungsdetails im Zusammenhang mit dem Barometersensor beschrieben.
Keine plattformspezifischen Implementierungsangaben.
Compass
Mit dem Kompasssensor können Sie die Ausrichtung des Geräts auf den magnetischen Norden überwachen.
Die ICompass-Schnittstelle bietet Zugriff auf den Sensor und ist über die Compass.Default-Eigenschaft verfügbar. Die ICompass
-Schnittstelle sowie die Compass
-Klasse sind im Microsoft.Maui.Devices.Sensors
-Namespace enthalten.
Rufen Sie die ICompass.Start-Methode auf, um mit der Überwachung des Kompasssensors zu beginnen. .NET MAUI löst das ICompass.ReadingChanged-Ereignis aus, wenn sich die Kompassausrichtung ändert. Verwenden Sie die ICompass.Stop-Methode, um die Überwachung des Sensors zu beenden. Sie können den Überwachungszustand des Kompasses mit der ICompass.IsMonitoring-Eigenschaft erkennen, die true
ist, wenn der Kompass gestartet wurde und derzeit überwacht wird.
Im folgenden Codebeispiel wird die Überwachung des Kompasses auf Änderungen veranschaulicht:
private void ToggleCompass()
{
if (Compass.Default.IsSupported)
{
if (!Compass.Default.IsMonitoring)
{
// Turn on compass
Compass.Default.ReadingChanged += Compass_ReadingChanged;
Compass.Default.Start(SensorSpeed.UI);
}
else
{
// Turn off compass
Compass.Default.Stop();
Compass.Default.ReadingChanged -= Compass_ReadingChanged;
}
}
}
private void Compass_ReadingChanged(object sender, CompassChangedEventArgs e)
{
// Update UI Label with compass state
CompassLabel.TextColor = Colors.Green;
CompassLabel.Text = $"Compass: {e.Reading}";
}
Plattformspezifische Informationen (Kompass)
In diesem Abschnitt werden plattformspezifische Implementierungsdetails im Zusammenhang mit der Kompassfunktion beschrieben.
Android bietet keine API zum Abrufen der Kompassausrichtung. Zum Berechnen der magnetischen Nordrichtung verwendet .NET MAUI die Sensoren des Beschleunigungsmessers und des Magnetometer verwendet, was von Google empfohlen wird.
In seltenen Fällen werden möglicherweise inkonsistente Ergebnisse angezeigt, weil die Sensoren kalibriert werden müssen. Die erneute Kalibrierung des Kompasses auf Android variiert je nach Smartphonemodell und Android-Version. Sie müssen das Internet durchsuchen, um zu erfahren, wie der Kompass neu kalibriert wird. Hier sind zwei Links, die beim Rekalibrieren des Kompasses hilfreich sein können:
- Google-Hilfe: Standortgenauigkeit ermitteln und verbessern
- Stack Exchange Android Enthusiasts: Wie kann ich den Kompass auf meinem Smartphone kalibrieren?
Das gleichzeitige Ausführen mehrerer Sensoren von Ihrer App kann sich auf die Geschwindigkeit des Sensors auswirken.
Lowpass-Filter
Je nachdem, wie die Android-Kompasswerte aktualisiert und berechnet werden, müssen die Werte möglicherweise geglättet werden. Hier kann ein Tiefpassfilter angewendet werden, der aus den Sinus- und Kosinuswerten der Winkel einen Mittelwert bildet. Er wird mithilfe der Start
-Methodenüberladung aktiviert, die den bool applyLowPassFilter
-Parameter akzeptiert:
Compass.Default.Start(SensorSpeed.UI, applyLowPassFilter: true);
Dies wird nur auf der Android-Plattform angewendet, und der Parameter wird auf iOS und Windows ignoriert. Weitere Informationen finden Sie in diesem GitHub-Issue-Kommentar.
Schütteln
In diesem Artikel wird Schütteln zwar als Sensor aufgeführt, dies ist aber nicht der Fall. Der Beschleunigungsmesser wird verwendet, um zu erkennen, wann das Gerät geschüttelt wird.
Die IAccelerometer-Schnittstelle bietet Zugriff auf den Sensor und ist über die Accelerometer.Default-Eigenschaft verfügbar. Die IAccelerometer
-Schnittstelle sowie die Accelerometer
-Klasse sind im Microsoft.Maui.Devices.Sensors
-Namespace enthalten.
Hinweis
Wenn Ihre App Sensordaten des Beschleunigungsmessers mithilfe der Sensorgeschwindigkeit Fastest sammeln muss, müssen Sie die HIGH_SAMPLING_RATE_SENSORS
-Berechtigung deklarieren. Weitere Informationen finden Sie unter Beschleunigungsmesser.
Die API zum Erkennen von Schüttelbewegungen verwendet unformatierte Messwerte vom Beschleunigungsmesser, um die Beschleunigung zu berechnen. Sie nutzt einen einfachen Warteschlangenmechanismus, um zu ermitteln, ob 3/4 der letzten Beschleunigungsmesserereignisse in der letzten halben Sekunde aufgetreten sind. Die Beschleunigung wird durch Addieren der X-, Y- und Z-Messwerte ($x^2+y^2+z^2$) des Beschleunigungsmessers zum Quadrat und Vergleichen mit einem bestimmten Schwellenwert berechnet.
Rufen Sie die IAccelerometer.Start-Methode auf, um mit der Überwachung des Beschleunigungsmessersensors zu beginnen. Wenn ein Schütteln erkannt wird, wird das IAccelerometer.ShakeDetected-Ereignis ausgelöst. Verwenden Sie die IAccelerometer.Stop-Methode, um die Überwachung des Sensors zu beenden. Sie können den Überwachungszustand des Beschleunigungsmessers mit der IAccelerometer.IsMonitoring
-Eigenschaft erkennen, die true
ist, wenn der Beschleunigungsmesser gestartet wurde und derzeit überwacht wird.
Es wird empfohlen, Game oder schneller für die SensorSpeed zu verwenden.
Im folgenden Codebeispiel wird die Überwachung des Beschleunigungsmessers für das ShakeDetected
-Ereignis veranschaulicht:
private void ToggleShake()
{
if (Accelerometer.Default.IsSupported)
{
if (!Accelerometer.Default.IsMonitoring)
{
// Turn on accelerometer
Accelerometer.Default.ShakeDetected += Accelerometer_ShakeDetected;
Accelerometer.Default.Start(SensorSpeed.Game);
}
else
{
// Turn off accelerometer
Accelerometer.Default.Stop();
Accelerometer.Default.ShakeDetected -= Accelerometer_ShakeDetected;
}
}
}
private void Accelerometer_ShakeDetected(object sender, EventArgs e)
{
// Update UI Label with a "shaked detected" notice, in a randomized color
ShakeLabel.TextColor = new Color(Random.Shared.Next(256), Random.Shared.Next(256), Random.Shared.Next(256));
ShakeLabel.Text = $"Shake detected";
}
Plattformspezifische Informationen (Schütteln)
Es gibt keine plattformspezifischen Informationen im Zusammenhang mit dem Beschleunigungsmessersensor.
Gyroskop
Der Gyroskopsensor misst die Winkeldrehzahl um die drei Primärachsen des Geräts.
Die IGyroscope-Schnittstelle bietet Zugriff auf den Sensor und ist über die Gyroscope.Default-Eigenschaft verfügbar. Die IGyroscope
-Schnittstelle sowie die Gyroscope
-Klasse sind im Microsoft.Maui.Devices.Sensors
-Namespace enthalten.
Erste Schritte
Für den Zugriff auf die Gyroskop-Funktion ist die folgende plattformspezifische Einrichtung erforderlich.
Wenn Ihre App auf Android 12+ (API 31+) ausgerichtet ist, legt das System eine Grenze von 200 Hz für die Aktualisierungsrate von Daten von diesem Sensor fest. Wenn Ihre App Sensordaten mithilfe der Sensorgeschwindigkeit Fastest sammeln muss, müssen Sie die HIGH_SAMPLING_RATE_SENSORS
-Berechtigung deklarieren. Sie können die Berechtigung auf folgende Weise konfigurieren:
Fügen Sie die assemblybasierte Berechtigung hinzu:
Öffnen Sie die Datei Platforms/Android/MainApplication.cs, und fügen Sie das folgende Assemblyattribut nach
using
-Direktiven hinzu:[assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
- oder -
Aktualisieren Sie das Android-Manifest:
Öffnen Sie die Datei Platforms/Android/AndroidManifest.xml, und fügen Sie die folgende Zeile zum Knoten
manifest
hinzu:<uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
- oder -
Aktualisieren Sie das Android-Manifest im Manifest-Editor:
Doppelklicken Sie in Visual Studio auf die Datei Platforms/Android/AndroidManifest.xml, um den Android-Manifest-Editor zu öffnen. Überprüfen Sie dann unter Erforderliche Berechtigungen die Berechtigung HIGH_SAMPLING_RATE_SENSORS. Dadurch wird die Datei AndroidManifest.xml automatisch aktualisiert.
Hinweis
Wenn ein/eine Benutzer*in den Mikrofonzugriff mithilfe der Geräteumschaltfläche deaktiviert, sind Bewegungs- und Positionssensoren immer im Hinblick auf die Geschwindigkeit eingeschränkt, unabhängig davon, ob Sie die HIGH_SAMPLING_RATE_SENSORS
-Berechtigung deklarieren.
Überwachen des Gyroskopsensors
Rufen Sie die IGyroscope.Start-Methode auf, um mit der Überwachung des Gyroskopsensors zu beginnen. .NET MAUI sendet Änderungen an den Gyroskopdaten an Ihre App, indem das IGyroscope.ReadingChanged-Ereignis ausgelöst wird. Die von diesem Ereignis bereitgestellten Daten werden in Rad/s (Radian pro Sekunde) gemessen. Verwenden Sie die IGyroscope.Stop-Methode, um die Überwachung des Sensors zu beenden. Sie können den Überwachungszustand des Gyroskops mit der IGyroscope.IsMonitoring-Eigenschaft erkennen, die true
ist, wenn das Gyroskop gestartet wurde und derzeit überwacht wird.
Im folgenden Codebeispiel wird die Überwachung des Gyroskops auf Änderungen veranschaulicht:
private void ToggleGyroscope()
{
if (Gyroscope.Default.IsSupported)
{
if (!Gyroscope.Default.IsMonitoring)
{
// Turn on gyroscope
Gyroscope.Default.ReadingChanged += Gyroscope_ReadingChanged;
Gyroscope.Default.Start(SensorSpeed.UI);
}
else
{
// Turn off gyroscope
Gyroscope.Default.Stop();
Gyroscope.Default.ReadingChanged -= Gyroscope_ReadingChanged;
}
}
}
private void Gyroscope_ReadingChanged(object sender, GyroscopeChangedEventArgs e)
{
// Update UI Label with gyroscope state
GyroscopeLabel.TextColor = Colors.Green;
GyroscopeLabel.Text = $"Gyroscope: {e.Reading}";
}
Plattformspezifische Informationen (Gyroskop)
Es gibt keine plattformspezifischen Informationen im Zusammenhang mit dem Gyroskopsensor.
Magnetometer
Der gibt die Ausrichtung des Geräts relativ zum Magnetfeld der Erde an.
Die IMagnetometer-Schnittstelle bietet Zugriff auf den Sensor und ist über die Magnetometer.Default-Eigenschaft verfügbar. Die IMagnetometer
-Schnittstelle sowie die Magnetometer
-Klasse sind im Microsoft.Maui.Devices.Sensors
-Namespace enthalten.
Erste Schritte
Für den Zugriff auf die Magnetometer-Funktion ist die folgende plattformspezifische Einrichtung erforderlich.
Wenn Ihre App auf Android 12+ (API 31+) ausgerichtet ist, legt das System eine Grenze von 200 Hz für die Aktualisierungsrate von Daten von diesem Sensor fest. Wenn Ihre App Sensordaten mithilfe der Sensorgeschwindigkeit Fastest sammeln muss, müssen Sie die HIGH_SAMPLING_RATE_SENSORS
-Berechtigung deklarieren. Sie können die Berechtigung auf folgende Weise konfigurieren:
Fügen Sie die assemblybasierte Berechtigung hinzu:
Öffnen Sie die Datei Platforms/Android/MainApplication.cs, und fügen Sie das folgende Assemblyattribut nach
using
-Direktiven hinzu:[assembly: UsesPermission(Android.Manifest.Permission.HighSamplingRateSensors)]
- oder -
Aktualisieren Sie das Android-Manifest:
Öffnen Sie die Datei Platforms/Android/AndroidManifest.xml, und fügen Sie die folgende Zeile zum Knoten
manifest
hinzu:<uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
- oder -
Aktualisieren Sie das Android-Manifest im Manifest-Editor:
Doppelklicken Sie in Visual Studio auf die Datei Platforms/Android/AndroidManifest.xml, um den Android-Manifest-Editor zu öffnen. Überprüfen Sie dann unter Erforderliche Berechtigungen die Berechtigung HIGH_SAMPLING_RATE_SENSORS. Dadurch wird die Datei AndroidManifest.xml automatisch aktualisiert.
Hinweis
Wenn ein/eine Benutzer*in den Mikrofonzugriff mithilfe der Geräteumschaltfläche deaktiviert, sind Bewegungs- und Positionssensoren immer im Hinblick auf die Geschwindigkeit eingeschränkt, unabhängig davon, ob Sie die HIGH_SAMPLING_RATE_SENSORS
-Berechtigung deklarieren.
Überwachen des Magnetometersensors
Rufen Sie die IMagnetometer.Start-Methode auf, um mit der Überwachung des Magnetometersensors zu beginnen. .NET MAUI sendet Änderungen an den Magnetometerdaten an Ihre App, indem das IMagnetometer.ReadingChanged-Ereignis ausgelöst wird. Die von diesem Ereignis bereitgestellten Daten werden in $μT$ (Mikrotesla) gemessen. Verwenden Sie die IMagnetometer.Stop-Methode, um die Überwachung des Sensors zu beenden. Sie können den Überwachungszustand des Magnetometers mit der IMagnetometer.IsMonitoring-Eigenschaft erkennen, die true
ist, wenn der Magnetometers gestartet wurde und derzeit überwacht wird.
Im folgenden Codebeispiel wird die Überwachung des Magnetometers auf Änderungen veranschaulicht:
private void ToggleMagnetometer()
{
if (Magnetometer.Default.IsSupported)
{
if (!Magnetometer.Default.IsMonitoring)
{
// Turn on magnetometer
Magnetometer.Default.ReadingChanged += Magnetometer_ReadingChanged;
Magnetometer.Default.Start(SensorSpeed.UI);
}
else
{
// Turn off magnetometer
Magnetometer.Default.Stop();
Magnetometer.Default.ReadingChanged -= Magnetometer_ReadingChanged;
}
}
}
private void Magnetometer_ReadingChanged(object sender, MagnetometerChangedEventArgs e)
{
// Update UI Label with magnetometer state
MagnetometerLabel.TextColor = Colors.Green;
MagnetometerLabel.Text = $"Magnetometer: {e.Reading}";
}
Plattformspezifische Informationen (Magnetometer)
Es gibt keine plattformspezifischen Informationen im Zusammenhang mit dem Magnetometersensor.
Ausrichtung
Der Ausrichtungssensor überwacht die Ausrichtung eines Gerätes im dreidimensionalen Raum.
Hinweis
Dieser Sensor wird nicht verwendet, um festzustellen, ob sich die Videoanzeige des Geräts im Hoch- oder Querformat befindet. Verwenden Sie stattdessen die DeviceDisplay.Current.MainDisplayInfo.Orientation
-Eigenschaft. Weitere Informationen finden Sie unter Geräteanzeigeinformationen.
Die IOrientationSensor-Schnittstelle bietet Zugriff auf den Sensor und ist über die OrientationSensor.Default-Eigenschaft verfügbar. Die IOrientationSensor
-Schnittstelle sowie die OrientationSensor
-Klasse sind im Microsoft.Maui.Devices.Sensors
-Namespace enthalten.
Rufen Sie die IOrientationSensor.Start-Methode auf, um mit der Überwachung des Ausrichtungssensors zu beginnen. .NET MAUI sendet Änderungen an den Ausrichtungsdaten an Ihre App, indem das IOrientationSensor.ReadingChanged-Ereignis ausgelöst wird. Verwenden Sie die IOrientationSensor.Stop-Methode, um die Überwachung des Sensors zu beenden. Sie können den Überwachungszustand des Ausrichtung mit der IOrientationSensor.IsMonitoring-Eigenschaft erkennen, die true
ist, wenn der Beschleunigungsmesser gestartet wurde und derzeit überwacht wird.
Im folgenden Codebeispiel wird die Überwachung des Ausrichtungssensors auf Änderungen veranschaulicht:
private void ToggleOrientation()
{
if (OrientationSensor.Default.IsSupported)
{
if (!OrientationSensor.Default.IsMonitoring)
{
// Turn on orientation
OrientationSensor.Default.ReadingChanged += Orientation_ReadingChanged;
OrientationSensor.Default.Start(SensorSpeed.UI);
}
else
{
// Turn off orientation
OrientationSensor.Default.Stop();
OrientationSensor.Default.ReadingChanged -= Orientation_ReadingChanged;
}
}
}
private void Orientation_ReadingChanged(object sender, OrientationSensorChangedEventArgs e)
{
// Update UI Label with orientation state
OrientationLabel.TextColor = Colors.Green;
OrientationLabel.Text = $"Orientation: {e.Reading}";
}
IOrientationSensor
-Messwerte werden im Quaternion-Format zurückgegeben, das die Ausrichtung des Geräts basierend auf zwei 3D-Koordinatensystemen beschreibt:
Das Gerät (in der Regel ein Smartphone oder Tablet) verfügt über ein 3D-Koordinatensystem mit den folgenden Achsen:
- Die positive X-Achse zeigt im Hochformat nach rechts auf der Anzeige.
- Die positive Y-Achse zeigt im Hochformat auf dem Gerät nach oben.
- Die positive Z-Achse zeigt aus dem Bildschirm heraus.
Das 3D-Koordinatensystem der Erde hat die folgenden Achsen:
- Die positive X-Achse ist eine Tangente zur Erdoberfläche und zeigt nach Osten.
- Die positive Y-Achse ist eine Tangente zur Erdoberfläche und zeigt nach Norden.
- Die positive Z-Achse verläuft senkrecht zur Erdoberfläche und zeigt nach oben.
Die Quaternion
beschreibt die Drehung des Koordinatensystems des Geräts relativ zum Erdkoordinatensystem.
Ein Quaternion
-Wert ist sehr eng mit der Drehung um eine Achse verbunden. Wenn eine Drehachse der normierte Vektor ($a_x, a_y, a_z$) ist und der Drehwinkel $\theta$ entspricht, dann lauten die Komponenten (X, Y, Z, W) der Quaternion:
$(a_x \times \sin(\theta/2), a_y \times \sin(\theta/2), a_z \times \sin(\theta/2), \cos(\theta/2))$
Dies sind rechtshändige Koordinatensysteme: Zeigt der Daumen der rechten Hand in die positive Richtung der Drehachse, zeigen die anderen Finger den positiven Drehsinn an.
Beispiele:
Wenn das Gerät flach auf einem Tisch mit dem Bildschirm nach oben liegt und die Oberseite des Geräts (im Hochformat) nach Norden zeigt, werden die beiden Koordinatensysteme ausgerichtet. Der
Quaternion
-Wert stellt die Identitätsquaternion (0, 0, 0, 1) dar. Alle Rotationen lassen sich relativ zu dieser Position analysieren.Wenn das Gerät flach auf einem Tisch mit dem Bildschirm nach oben liegt und die Oberseite des Geräts (im Hochformat) nach Westen zeigt, entspricht der
Quaternion
-Wert (0, 0, 0,707, 0,707). Das Gerät wurde um 90 Grad um die Z-Achse der Erde gedreht.Wenn das Gerät aufrecht gehalten wird, sodass seine Oberseite (im Hochformat) zum Himmel und die Rückseite nach Norden zeigt, wurde das Gerät um 90 Grad um die X-Achse gedreht. Der
Quaternion
-Wert lautet 0,707, 0, 0, 0,707.Wenn das Gerät so positioniert ist, dass sein linker Rand auf einem Tisch liegt und die Oberseite nach Norden zeigt, wurde das Gerät um –90 Grad um die Y-Achse (bzw. 90 Grad um die negative Y-Achse) gedreht. Der
Quaternion
-Wert ist (0, –0,707, 0, 0,707).
Plattformspezifische Informationen (Ausrichtung)
Es gibt keine plattformspezifischen Informationen im Zusammenhang mit dem Ausrichtungssensor.