Información sobre onSensorChanged del acelerómetro android

Estoy tratando de escribir un juego de detección de movimiento en la plataforma android. Estoy incluyendo todo mi algoritmo de detección de movimiento en la función onSensorChanged (). El problema es que la función se ejecuta para diferentes tiempos basados ​​en la entrada. Tengo ciertas preguntas sobre cómo la función se ejecuta y se llama: –

1) ¿Si mi función se ejecuta durante mucho tiempo que 2 evento onSensorChanged ocurre ambos se llama o sólo la última?

2) ¿La función onSensorChanged se ejecuta en diferentes subprocesos distintos del hilo de actividad?

3) ¿La instancia múltiple de la función onSensorcChanged se ejecuta en diferentes subprocesos? ¿Hay algún tipo de sincronización en el acceso variable?

4) ¿Puede alguien señalarme a donde puedo encontrar alguna información detallada sobre onSensorChanged () o información relacionada?

5) ¿Hay alguna forma de que pueda jugar el juego por algún tiempo y ver cómo los valores cambiaron durante el tiempo y cómo se ejecutó la función de manera diferente?

Sería más útil si pudiera proporcionar qué tipo de sensor está utilizando. Voy a asumir que es Sensor.TYPE_ORIENTATION .

1) ¿Si mi función se ejecuta durante mucho tiempo que 2 evento onSensorChanged ocurre ambos se llama o sólo la última?

El método onSensorChanged proporciona un objeto de evento (parámetro de values ), al que están conectados los valores del sensor específico. Para Sensor.TYPE_ORIENTATION , event.values[0] es Azimuth, event.values[1] es el Pitch, y event.values[2] es Roll. Lea la página de Desarrolladores de Android SensorEvent para entender mejor esto. Los valores anteriores se actualizan con bastante rapidez, y sólo la forma en que maneja estos cambios de valor determina qué actualización de valor se utilizará. Por ejemplo, puede actualizar continuamente su vista en función de cómo se cambian los valores de evento.

2) ¿La función onSensorChanged se ejecuta en diferentes subprocesos distintos del hilo de actividad?

Se ejecuta en un subproceso diferente que depende de la actividad a la que se ha agregado (la actividad que implementó la interfaz SensorEventListener o contiene un objeto instanciado de una clase interna anónima creada en el objeto SensorEventListener ).

3) ¿La instancia múltiple de la función onSensorcChanged se ejecuta en diferentes subprocesos? ¿Hay algún tipo de sincronización en el acceso variable?

No estoy muy seguro acerca de esto, pero me imagino que se sincronizar el objeto de event mientras se está actualizando. Sí, varias instancias de clases que implementan la interfaz SensorEventListener pueden ejecutarse por separado.

4) ¿Puede alguien señalarme a donde puedo encontrar alguna información detallada sobre onSensorChanged () o información relacionada?

  • Documentación de SensorEventListener

5) ¿Hay alguna forma de que pueda jugar el juego por algún tiempo y ver cómo los valores cambiaron durante el tiempo y cómo se ejecutó la función de manera diferente?

¿Está utilizando gráficos o diseños? Si está utilizando gráficos,

Clase de actividad:

 public class YourActivity extends Activity { MyView _view; int sensorAccuracy; SensorManager sensorManager; SensorEventListener sensorListener = new SensorEventListener() { public void onAccuracyChanged(Sensor sensor, int accuracy) { sensorAccuracy = accuracy; } public void onSensorChanged(SensorEvent event) { //pass the values to view for display _view.setOrientation(event.values[0],event.values[1],event.values[2]); } }; protected void onCreate(Bundle savedInstanceState) { sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); sensorManager.registerListener(sensorListener, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_FASTEST); _view = new MyView(this); } } 

Ver Clase

 class MyView extends View() { Context _context; int _azimuth, _pitch, _roll; public MyView(Context context) { super(context); _context = context; } public setOrientation(azimuth, pitch, roll) { _azimuth = azimuth; _pitch = pitch; _roll = roll; } protected void onDraw(Canvas canvas) { paint.setStyle(Paint.Style.FILL); paint.setColor(Color.BLACK); canvas.drawText("Azimuth: " + _azimuth + "Pitch: " + _pitch + "Roll: " + _roll, 10, 10, paint); } } 

El código anterior mostrará el texto que contiene los valores actualizados en la parte superior de la pantalla. Notará que estos valores se actualizan con mucha frecuencia. Del mismo modo, si utiliza diseños, simplemente actualice una vista de texto con los nuevos valores de evento.

¡Buena suerte!

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.