Diferentes valores de acelerómetros en varios dispositivos

Estoy haciendo un juego que utiliza el acelerómetro del dispositivo para llenar una barra de progreso. En mi nota 2 me toma cerca de 20 segundos sacudiendo el teléfono arriba y abajo para llenar la barra, sin embargo intenté en una lámina de ZTE y me tomó 4 segundos.

¿Hay alguna manera de calibrar los acelerómetros dentro de mi código? Esto es lo que estoy haciendo:

@Override public void onSensorChanged(SensorEvent event) { float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; if (!mInitialized) { mLastX = x; mLastY = y; mLastZ = z; mInitialized = true; } else { float deltaX = Math.abs(mLastX - x); float deltaY = Math.abs(mLastY - y); float deltaZ = Math.abs(mLastZ - z); if (deltaX < NOISE) deltaX = (float)0.0; if (deltaY < NOISE) deltaY = (float)0.0; if (deltaZ < NOISE) deltaZ = (float)0.0; mLastX = x; mLastY = y; mLastZ = z; if(deltaY == 0){ return; } sProgress += deltaY; pb.setProgress(sProgress); } } 

El problema puede ser con la frecuencia de Accelerometer.Dont utilizar debajo de las constantes de android mientras se registra.

 mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); 

estos valuse son diferentes para el diverso dispositivo.

 int SENSOR_DELAY_FASTEST get sensor data as fast as possible int SENSOR_DELAY_GAME rate suitable for games int SENSOR_DELAY_NORMAL rate (default) suitable for screen orientation changes int SENSOR_DELAY_UI rate suitable for the user interface 

Utilice valores codificados en microsegundos como para la frecuencia 1 Hz

 mSensorManager.registerListener(this, mAccelerometer,1000000); 

Espero que resuelva.

Otra solución para hacer que la frecuencia sea igual es algo como la siguiente solución.

 @Override public void onSensorChanged(SensorEvent sensorEvent) { if(sensorEventTooQuick(sensorEvent.timestamp)) { return; } mLastSensorEventTime = sensorEvent.timestamp; // process sensor } private boolean sensorEventTooQuick(long sensorTime) { long diff = sensorTime - mLastSensorEventTime; return diff < MINIMUM_SENSOR_EVENT_GAP; } 

Cosas para considerar:

  • Desea asegurarse de que elija MINIMUM_SENSOR_EVENT_GAP para que sea lo suficientemente pequeño como para no perder información. El acelerómetro es muy rápido por lo que este no suele ser un problema, pero podría ser un problema para otros sensores en función de la aplicación.
  • Asegúrese de probar diferentes valores en diferentes dispositivos.

Lo hago porque garantiza que no recibirá eventos más rápido que su límite.

  • Acelerómetro con filtro de paso bajo en Android
  • Biblioteca FFT en android Sdk
  • Detectar algoritmo de giro de 360 ​​grados
  • Calculando la distancia usando aceleración lineal android
  • Mal Datos del acelerómetro con vibración
  • ¿Dónde puedo encontrar recursos y muestras de código para hacer uso de la señal de un acelerómetro?
  • Orientación desde Android Acelerómetro
  • Cuándo usar acelerómetro o giroscopio en Android
  • Componentes de la gravedad del acelerómetro
  • Sistema de Posicionamiento Interior basado en Giroscopio y Acelerómetro
  • ¿Cómo mejorar la precisión de los sensores de acelerómetro y brújula?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.