Diferencia entre revisiones de «Usuario:ManuelRomero/Android/Eventos»
Línea 51: | Línea 51: | ||
// Pedimos la lista con todos los sensores disponibles | // Pedimos la lista con todos los sensores disponibles | ||
List<Sensor> listSensors = mSensorManager.getSensorList(Sensor.TYPE_ALL); | List<Sensor> listSensors = mSensorManager.getSensorList(Sensor.TYPE_ALL); | ||
− | + | // Iteramos y mostramos | |
− | + | Log.i("SENSOR","Encontrados sensores :"+listSensors.size()); | |
− | + | for(int i=0; i<listSensors.size();i++){ | |
− | + | Log.i("SENSOR", listSensors.get(i).getName()); | |
− | + | } | |
− | + | ||
</source> | </source> | ||
+ | <div style="font:16px/1.4 Arial;"> | ||
+ | ;Ideas importantes | ||
+ | :'''''SensorEventListener''''' tiene dos métodos abstractos que hay que implementar | ||
+ | <source lang=java> | ||
+ | .... | ||
+ | abstract void onAccuracyChanged(Sensor sensor, int accuracy) | ||
+ | ..... | ||
+ | abstract void onSensorChanged(SensorEvent event) | ||
+ | .... | ||
+ | </sourece> | ||
+ | *El primer método es invocado cuando cambia la preción o cualquier característica del sensor | ||
+ | *El segundo método es invocado cuando cambia la posición del móvil respecto al eje de coordenadas que tiene establecido. | ||
+ | En este caso no podemos asociar el listener a un objeto view, ya que es el dispositivo hardware el que genera los eventos | ||
+ | *Lo que tenemos que hacer es registrar el listener, la clase que estamos implementando al administrador del sistema de sensores. | ||
+ | boolean registerListener(SensorEventListener listener, Sensor sensor, int rateUs, Handler handler) | ||
+ | *El último parámetro es un valor que de alguna forma indica cada cuanto tiempo voy a enviar información del sensor al sistema para acutalizarlo. | ||
+ | *Un valor adecuado es la constante SensorManager.SENSOR_DELAY_GAME | ||
+ | </div> |
Revisión de 00:35 3 dic 2013
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas. |
Tipo de eventos
- En android como en java la gestión de eventos se gestiona mediante los manejadores de eventos o listener
- Concepto de delegación de eventos
- Concepto de accion y evento
- Como ciertos eventos los maneja android de forma transparente mediante propiedades en el xml
- Eventos que vamos a tratar
- Pantalla táctil
- Teclado
- Acelerómetro
Pantalla táctil
Se pueden clasificar según toquemos o el sistema sea capaz de reconocer sólo un toque o varios toques
- SingleTouch
- MultiTouch
Este tipo de eventos los manejará una clase que implemente la interfaz OnTouchListener El método para asociar ese manejador o listener a un objeto gráfico del cual queremos reconocer los eventos que se originen al generar esa acción sobre el objeto es 'View.setOnTouchListener, donde View sería sustituido por el objeto gráfico concreto La clase que implemente la interfaz OnTouchListener debe implementar el método onTouch...
public abstract boolean onTouch (View v, MotionEvent evento)
A continuación vemos la información que nos aporta el objeto evento que recibo como parámetro este método La clase MotionEvent Esta clase da informacion que identifIca la accioón de toque que ha ocurrido, así como la posición x,y donde ha ocurrido. En el caso de multiples toques MultiTouch MotionEvent guarda un identificador para cada dedo que ha tocado en la pantalla, y dicho identificador no cambia hasta que no se levanta dicho dedo.
- Tipos de acciones
- UP : El usuario quita el dedo de la pantalla. correspondes a acciones ACTION_UP o ACTION_POINTER_UP.
- DOWN :El usuario pone el dedo en la pantalla. correspondes a acciones ACTION_DOWN o ACTION_POINTER_DOWN.
- MOVE : El usuario mueve el dedo por la pantalla. ACTION_MOVE.
- CANCEL :Se cancela la acción de tocar la pantalla. ACTION_CANCEL.
En el caso de que se al primer toque, el evento que se produce lleva una accion ACTION_UP, siguientes toques generarán un evento que llevarán como acción ACTION_POINTER_UP. El caso de MultiTouch es especial pues tendré varios toques de forma simultánea en la pantalla, y en un momento dado quiro tener identificado cada uno de ellos. Para hacer un seguimiento de cada toque, el sistema les asigna un indice y un identificador (index, id)
Sensores
- Los dispositivos móviles, son varios los sensores que pueden tener
- Los podemos ver aquí http://developer.android.com/reference/android/hardware/Sensor.html.
- Para gestionar los sensores tenemos las siguientes clases
- Sensor
- SensorEvent
- SensorManager
- Para gestionar los eventos que generen este hardware debemos implemenatar la interfaz SensorEventListener.
- El siguiente código me permite obtener una lista de todos los dispositivos, con él se puede entender de que forma se puede gestionar en el programa
**** //Verifico que el sistema tenga sensor // Solicitamos al sistema el servicio que gestiona los sensores SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); // Pedimos la lista con todos los sensores disponibles List<Sensor> listSensors = mSensorManager.getSensorList(Sensor.TYPE_ALL); // Iteramos y mostramos Log.i("SENSOR","Encontrados sensores :"+listSensors.size()); for(int i=0; i<listSensors.size();i++){ Log.i("SENSOR", listSensors.get(i).getName()); }
- Ideas importantes
- SensorEventListener tiene dos métodos abstractos que hay que implementar
.... abstract void onAccuracyChanged(Sensor sensor, int accuracy) ..... abstract void onSensorChanged(SensorEvent event) .... </sourece> *El primer método es invocado cuando cambia la preción o cualquier característica del sensor *El segundo método es invocado cuando cambia la posición del móvil respecto al eje de coordenadas que tiene establecido. En este caso no podemos asociar el listener a un objeto view, ya que es el dispositivo hardware el que genera los eventos *Lo que tenemos que hacer es registrar el listener, la clase que estamos implementando al administrador del sistema de sensores. boolean registerListener(SensorEventListener listener, Sensor sensor, int rateUs, Handler handler) *El último parámetro es un valor que de alguna forma indica cada cuanto tiempo voy a enviar información del sensor al sistema para acutalizarlo. *Un valor adecuado es la constante SensorManager.SENSOR_DELAY_GAME </div>