Xamarin.Essentials: Beschleunigungsmesser

Mit der Accelerometer-Klasse können Sie den Sensor für die Beschleunigungsmessung des Geräts überwachen, der die Beschleunigung des Geräts im dreidimensionalen Raum angibt.

Erste Schritte

Lesen Sie zum Einstieg in die Verwendung dieser API den Leitfaden mit ersten Schritte für Xamarin.Essentials, um sicherzustellen, dass die Bibliothek ordnungsgemäß installiert und in Ihren Projekten eingerichtet ist.

Verwenden der Accelerometer-Klasse

Fügen Sie in Ihrer Klasse einen Verweis auf Xamarin.Essentials hinzu:

using Xamarin.Essentials;

Accelerometer ruft die Methoden Start und Stop auf, um auf Änderungen der Beschleunigung zu lauschen. Änderungen werden über das ReadingChanged-Ereignis zurück gesendet. Sie können sie z.B. wie folgt verwenden:


public class AccelerometerTest
{
    // Set speed delay for monitoring changes.
    SensorSpeed speed = SensorSpeed.UI;

    public AccelerometerTest()
    {
        // Register for reading changes, be sure to unsubscribe when finished
        Accelerometer.ReadingChanged += Accelerometer_ReadingChanged;
    }

    void Accelerometer_ReadingChanged(object sender, AccelerometerChangedEventArgs e)
    {
        var data = e.Reading;
        Console.WriteLine($"Reading: X: {data.Acceleration.X}, Y: {data.Acceleration.Y}, Z: {data.Acceleration.Z}");
        // Process Acceleration X, Y, and Z
    }

    public void ToggleAccelerometer()
    {
        try
        {
            if (Accelerometer.IsMonitoring)
              Accelerometer.Stop();
            else
              Accelerometer.Start(speed);
        }
        catch (FeatureNotSupportedException fnsEx)
        {
            // Feature not supported on device
        }
        catch (Exception ex)
        {
            // Other error has occurred.
        }
    }
}

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 Mobilgerä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 haben die 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 und 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.

Sensorgeschwindigkeit

  • Schnellste: Ruft die Sensordaten so schnell wie möglich ab (in einem UI-Thread ist eine Rückgabe nicht garantiert).
  • Spiel: Für Spiele geeignete Übertragungsrate (in einem UI-Thread ist eine Rückgabe nicht garantiert).
  • Standard: Für Änderungen der Bildschirmausrichtung geeignete Standardübertragungsrate.
  • UI: Für allgemeine Benutzeroberflächenaktionen geeignete Übertragungsrate.

Wenn für Ihren Ereignishandler die Ausführung im UI-Thread nicht garantiert werden kann und der Ereignishandler auf Benutzeroberflächenelemente zugreifen muss, verwenden Sie die Methode MainThread.BeginInvokeOnMainThread, um diesen Code im UI-Thread auszuführen.

API

Auf Channel 9 und auf YouTube finden Sie weitere Videos zu Xamarin.