Usuario:ManuelRomero/Android/Eventos

De WikiEducator
< Usuario:ManuelRomero‎ | Android
Revisión a fecha de 23:36 2 dic 2013; ManuelRomero (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar
Road Works.svg Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos.
Ver página de charlas.
Road Works.svg




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
  1. Pantalla táctil
  2. Teclado
  3. 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

  1. SingleTouch
  2. 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
  1. UP : El usuario quita el dedo de la pantalla. correspondes a acciones ACTION_UP o ACTION_POINTER_UP.
  2. DOWN :El usuario pone el dedo en la pantalla. correspondes a acciones ACTION_DOWN o ACTION_POINTER_DOWN.
  3. MOVE : El usuario mueve el dedo por la pantalla. ACTION_MOVE.
  4. 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

  1. Sensor
  2. SensorEvent
  3. 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)
    ....
  • 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