Android: evita que la función de vibración del teléfono afecte a los datos del acelerómetro
He diseñado una aplicación que rastrea cuando me estoy moviendo con el acelerómetro, y puede vibrar el teléfono dependiendo de los diferentes umbrales que puede haber golpeado. Uno de los problemas que enfrenté es que esta vibración corrompe directamente los datos del acelerómetro.
Esta respuesta sugirió usar un filtro de paso bajo, pero no creo que funcione en esta aplicación (necesito un tiempo de respuesta relativamente rápido, y las vibraciones causan grandes picos en los datos).
- Vibración en Xamarin Android
- Patrón de vibración predeterminado del dispositivo Android
- ¿Cómo hacer vibrar un dispositivo Android?
- En Android (utilizando Java), ¿cómo puedo configurar el volumen del timbre (a un número especificado)?
- Patrón de vibración para entradas incorrectas (Android)
La solución que estoy utilizando actualmente es establecer una bandera a la verdadera derecha antes de que el teléfono vibre, llamar a una función postDelayed
que pondrá esto de nuevo a falso después de un cierto tiempo (1 segundo en fino), y en la función onSensorChanged
, simplemente regrese si la bandera es verdadera.
En otras palabras:
isPhoneVibrating = true; // Start to vibrate phoneVibrator.vibrate(VibratePattern, -1); mHandler.postDelayed(vibrateSensorOff, 1000); // 1 seconds wait before making false
El vibrateSensorOff
sólo contiene
isPhoneVibrating = false;
y como dije, en la función onSensorChanged
regreso si la bandera isPhoneVibrating
es verdadera.
No me gusta esta solución porque necesito administrar este indicador extra en los distintos estados de esta aplicación. ¿Hay otras soluciones posibles que no requieren una bandera adicional?
- Android Vibrar en la tostada (Homer: Mmmm vibrar en la tostada)
- Cómo proporcionar vibraciones personalizadas en las llamadas entrantes específicas
- ¿Cómo puedo hacer animación vibrante para ImageView
- Vibrar cuando se mantiene pulsado el botón
- Android: ¿Notification.DEFAULT_VIBRATE requiere permiso de vibración?
- ¿Cómo puedo hacer vibrar mi dispositivo?
- Comprobar la configuración del teléfono para la retroalimentación háptica
- Vibrar onclick
Usted podría tener dos singletons que seguir la pista si el teléfono está vibrando o no y administrar el Vibrator
y el Accelerometer
.
El gestor del Accelerometer
debe exponer los métodos que utiliza para el Accelerometer
y debe transmitir todos los eventos si el Vibrator
no se está ejecutando (esto es como un filtro para los datos del acelerómetro). Usted debe tener una bandera interna para si el teléfono está vibrando en el administrador de Accelerometer
y los métodos para configurarlo.
El administrador del Vibrator
debe exponer los métodos que utiliza para el Vibrator
y también debe actualizar el indicador del Administrador del Accelerometer
cuando el teléfono empiece a vibrar.
Estos son básicamente envoltorios para las instancias de Vibrator
y Accelerometer
en tu aplicación, pero deberían permitirte usar el Accelerometer
sin tener que preocuparte por el indicador de Vibrator
en todas partes de tu aplicación (solo los objetos del administrador deberían cuidar esa bandera).
Sé que esta solución requiere una bandera extra, pero te permite administrar esa bandera en sólo dos lugares (en los dos singletons) y no tienes que seguirla en toda tu aplicación. Si implementas los dos singletons, asegúrate de no usar el Vibrator
o el Accelerometer
directamente (ya que tendrías que mantener un registro de la bandera de vibración para hacer eso).
- Error opencv: No se pudo cargar opencv_contrib: findLibrary returned null
- Android Studio y ADT tienen diferentes valores de TypedArray