Xamarin.Essentials: detección de agitacionesXamarin.Essentials: Detect Shake

La clase Accelerometer permite supervisar el sensor del acelerómetro del dispositivo, que indica la aceleración del dispositivo en un espacio tridimensional.The Accelerometer class lets you monitor the device's accelerometer sensor, which indicates the acceleration of the device in three-dimensional space. Además, le permite registrar eventos que se realizarán cuando el usuario agite el dispositivo.Additionally, it enables you to register for events when the user shakes the device.

Primeros pasosGet started

Para empezar a usar esta API, lea la guía de introducción para Xamarin.Essentials con el fin de asegurarse de que la biblioteca está correctamente instalada y configurada en los proyectos.To start using this API, read the getting started guide for Xamarin.Essentials to ensure the library is properly installed and set up in your projects.

Uso de la detección de agitacionesUsing Detect Shake

Agregue una referencia a Xamarin.Essentials en su clase:Add a reference to Xamarin.Essentials in your class:

using Xamarin.Essentials;

Para detectar la agitación del dispositivo, debe usar la funcionalidad Accelerometer mediante una llamada a los métodos Start y Stop para realizar cambios en la aceleración y para detectar movimientos de agitación.To detect a shake of the device you must use the Accelerometer functionality by calling the Start and Stop methods to listen for changes to the acceleration and to detect a shake. Siempre que se detecte agitación, se desencadenará un evento ShakeDetected.Any time a shake is detected a ShakeDetected event will fire. Se recomienda usar Game o faster para SensorSpeed.It is recommended to use Game or faster for the SensorSpeed. A continuación le mostramos un ejemplo de uso:Here is sample usage:


public class DetectShakeTest
{
    // Set speed delay for monitoring changes.
    SensorSpeed speed = SensorSpeed.Game;

    public DetectShakeTest()
    {
        // Register for reading changes, be sure to unsubscribe when finished
        Accelerometer.ShakeDetected  += Accelerometer_ShakeDetected ;
    }

    void Accelerometer_ShakeDetected (object sender, EventArgs e)
    {
        // Process shake event
    }

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

Velocidad de sensorSensor Speed

  • Más rápido: obtener los datos del sensor tan rápido como sea posible (no se garantiza la devolución en el subproceso de interfaz de usuario).Fastest – Get the sensor data as fast as possible (not guaranteed to return on UI thread).
  • Juego: velocidad adecuada para juegos (no se garantiza la devolución en el subproceso de interfaz de usuario).Game – Rate suitable for games (not guaranteed to return on UI thread).
  • Normal: velocidad predeterminada adecuada para los cambios de orientación de pantalla.Normal – Default rate suitable for screen orientation changes.
  • Interfaz de usuario: velocidad adecuada para la interfaz de usuario general.UI – Rate suitable for general user interface.

Si no se garantiza la ejecución del controlador de eventos en el subproceso de interfaz de usuario y si el controlador de eventos necesita tener acceso a elementos de la interfaz de usuario, use el método MainThread.BeginInvokeOnMainThread para ejecutar ese código en el subproceso de interfaz de usuario.If your event handler is not guaranteed to run on the UI thread, and if the event handler needs to access user-interface elements, use the MainThread.BeginInvokeOnMainThread method to run that code on the UI thread.

Detalles de implementaciónImplementation Details

La API para la detección de agitaciones usa lecturas sin procesar del acelerómetro para calcular la aceleración.The detect shake API uses raw readings from the accelerometer to calculate acceleration. Utiliza un mecanismo de cola simple para detectar si tres cuartos de los eventos recientes del acelerómetro se han producido durante el último medio segundo.It uses a simple queue mechanism to detect if 3/4ths of the recent accelerometer events occurred in the last half second. La aceleración se calcula añadiendo el cuadrado de las lecturas X, Y y Z del acelerómetro y comparándolo con un umbral determinado.Acceleration is calculated by adding the square of the X, Y, and Z readings from the accelerometer and comparing it to a specific threashold.

APIAPI