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?

È stato utile?

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

http://suhassiddarth.blogspot.com/

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top