2009-06-12 19 views
5

me trató de obligar a algunas acciones a un botón de la cámara:Android: Eliminar el registro de botón de la cámara

videoPreview.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if(event.getAction() == KeyEvent.ACTION_DOWN) { 
      switch(keyCode) { 
       case KeyEvent.KEYCODE_CAMERA: 
        //videoPreview.onCapture(settings); 
        onCaptureButton(); 
... 
      } 
     } 
     return false; 
    } 
}); 

Al pulsar el botón Sin embargo la aplicación se bloquea porque el original se inicia la aplicación de la cámara.

¿Alguien sabe cómo evitar que la aplicación de la cámara se inicie cuando se presiona el botón de la cámara?

Respuesta

6

En su ejemplo, debe devolver true para informarle que "consumió" el evento. De esta manera:

videoPreview.setOnKeyListener(new OnKeyListener(){ 
    public boolean onKey(View v, int keyCode, KeyEvent event){ 
     if(event.getAction() == KeyEvent.ACTION_DOWN) { 
      switch(keyCode) { 
       case KeyEvent.KEYCODE_CAMERA: 
        //videoPreview.onCapture(settings); 
        onCaptureButton(); 
        /* ... */ 
        return true; 
      } 
     } 
     return false; 
    } 
}); 

También sólo funcionará si el videoPreview (o un elemento secundario) tiene el foco. Por lo que podría o bien configurarlo para tener el foco de forma predeterminada:

@Override 
public void onResume() { 
    /* ... */ 
    videoPreview.requestFocus(); 
    super.onResume(); 
} 

o (preferido) poner al oyente en el elemento de nivel superior (por ejemplo, un LinearLayout, RelativeLayout, etc.).

2

Olvidó devolver true en su caso KeyEvent.KEYCODE_CAMERA rama. Si devuelve true, eso indica a Android que ha consumido el evento clave y que la aplicación de la cámara no se debe iniciar. Al devolver falso todo el tiempo, todos los eventos clave se pasan hacia arriba a los controladores predeterminados.

3

una forma sencilla de deshabilitar el botón de la cámara (o reaccionar en un clic) es añadir lo siguiente a su actividad:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_CAMERA) { 
     return true; // do nothing on camera button 
    } 
    return super.onKeyDown(keyCode, event); 
} 
4

Tan pronto como se pulsa el botón de la cámara un mensaje de difusión se envía a todas las aplicaciones que lo escuchan Debes hacer uso de los receptores Broadcast y la función abortBroadcast(). Puede encontrar más detalles sobre esto en el siguiente enlace

http://suhassiddarth.blogspot.com/

Cuestiones relacionadas