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:
- Detectar si la persona se cae
- Cómo usar el Acelerómetro para medir la distancia para el desarrollo de aplicaciones para Android
- ¿Cómo puedo obtener la dirección del movimiento usando un acelerómetro?
- ¿Cómo puedo simular el acelerómetro en el emulador de Android?
- ¿Cómo / Debo implementar un filtro de Kalman para obtener datos precisos de Acelerómetro?
@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); } }
- Android acelerómetro no funciona cuando se desactiva la pantalla
- El acelerómetro detiene la entrega de muestras cuando la pantalla está apagada en Droid / Nexus One incluso con un WakeLock
- Acelerómetro (acceso rápido) mediante NativeActivity NDK
- Smartphone acelerómetro gestos algoritmos
- Android Solución para los sensores que no funcionan cuando la pantalla está desactivada
- ¿Cómo medir la velocidad del coche por teléfono con acelerómetro y giroscopio?
- Obtener rotación y mostrar en grados
- Cómo calcular la velocidad de movimiento del usuario en android
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.
- ¿Puedo ayudar al Galaxy S III a reconocer una dirección?
- Obtener recursos de WebView que ya se ha descargado