Android: il pulsante Annulla registrazione della macchina fotografica
Domanda
Ho cercato di legare alcune azioni a un pulsante della fotocamera:
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;
}
});
Premendo il tasto tuttavia l'applicazione si blocca, perché si avvia l'applicazione Fotocamera originale.
Qualcuno sa come prevenire inizio applicazione Fotocamera quando si preme il pulsante della fotocamera?
Soluzione
Nel tuo esempio è necessario tornare true
per lasciarlo sapere che "consumato" l'evento. In questo modo:
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;
}
});
Si lavorerà anche solo se il videoPreview
(o un elemento figlio) è attivo. Così si potrebbe impostarlo per avere attenzione per impostazione predefinita:
@Override
public void onResume() {
/* ... */
videoPreview.requestFocus();
super.onResume();
}
o (preferito) mettere l'ascoltatore sull'elemento di livello superiore (ad esempio un LinearLayout
, RelativeLayout
, ecc.).
Altri suggerimenti
Non appena pulsante della fotocamera viene premuto una trasmissione messaggio viene inviato a tutte le applicazioni di ascolto ad esso. Hai bisogno di fare uso di ricevitori Broadcast e la funzione abortBroadcast (). Potete trovare maggiori dettagli riguardo a questa nel link qui sotto
un modo semplice per disattivare il pulsante della fotocamera (o reagire in un clic) è quello di aggiungere il seguente alla vostra attività:
@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);
}
Si è dimenticato di tornare true
nel vostro ramo caso KeyEvent.KEYCODE_CAMERA
. Se si torna vero, che i segnali per Android che si è consumato l'evento chiave, e l'applicazione Fotocamera non dovrebbe essere lanciato. Restituendo falso per tutto il tempo, tutti gli eventi chiave sono passati verso l'alto per i gestori predefiniti.