Condividi tramite


Xamarin.Essentials:Accelerometro

La classe Accelerometer consente di monitorare il sensore dell'accelerometro del dispositivo, che indica l'accelerazione del dispositivo nello spazio tridimensionale.

Operazioni preliminari

Per iniziare a usare questa API, leggere la guida introduttiva per Xamarin.Essentials assicurarsi che la libreria sia installata e configurata correttamente nei progetti.

Uso della classe Accelerometer

Aggiungere un riferimento a Xamarin.Essentials nella classe :

using Xamarin.Essentials;

La funzionalità Accelerometer opera chiamando i metodi Start e Stop per attivare l'ascolto dei cambi di accelerazione. Le eventuali modifiche vengono inviate tramite l'evento ReadingChanged. Utilizzo di esempio:


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.
        }
    }
}

Le letture dell'accelerometro vengono restituite in G. G è un'unità di forza gravitazionale uguale a quella esercitata dal campo gravitazionale della terra (9,81 m/s^2).

Il sistema di coordinate viene definito in relazione allo schermo del telefono con l'orientamento predefinito. Gli assi non vengono invertiti quando cambia l'orientamento dello schermo del dispositivo.

L'asse X è orizzontale e punta verso destra, l'asse Y è verticale e punta verso l'alto e l'asse Z punta verso l'esterno rispetto alla parte frontale dello schermo. In questo sistema, le coordinate dietro lo schermo hanno valori Z negativi.

Esempi:

  • Quando il dispositivo è piatto su un piano e viene spinto dal lato sinistro verso destra, il valore di accelerazione x è positivo.

  • Quando il dispositivo si trova piatto su una tabella, il valore di accelerazione è +1,00 G o (+9,81 m/s^2), che corrisponde all'accelerazione del dispositivo (0 m/s^2) meno la forza di gravità (-9,81 m/s^2) e normalizzata come in G.

  • Quando il dispositivo è piatto su un piano e viene spinto verso il cielo con un'accelerazione di A m/s^2, il valore di accelerazione è uguale a A+9,81 che corrisponde all'accelerazione del dispositivo (+A m/s^2) meno la forza di gravità (-9,81 m/s^2) normalizzata in G.

Velocità del sensore

  • Fastest - Ottenere i dati del sensore il più velocemente possibile (non è garantita la restituzione sul thread dell'interfaccia utente).
  • Game - Velocità adatta ai giochi (non è garantita la restituzione sul thread dell'interfaccia utente).
  • Impostazione predefinita: frequenza predefinita adatta alle modifiche dell'orientamento dello schermo.
  • UI - Velocità adatta per l'interfaccia utente generale.

Se non è garantito che il gestore eventi venga eseguito sul thread dell'interfaccia utente e se il gestore eventi deve accedere a elementi dell'interfaccia utente, usare il metodo MainThread.BeginInvokeOnMainThread per eseguire il codice sul thread dell'interfaccia utente.

API

Altri video di Xamarin sono disponibili su Channel 9 e YouTube.