Android: отменить регистрацию кнопки камеры - PullRequest
5 голосов
/ 12 июня 2009

Я пытался привязать некоторые действия к кнопке камеры:

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;
    }
});

При нажатии на кнопку происходит сбой приложения, поскольку запускается исходное приложение Camera.

Кто-нибудь знает, как предотвратить запуск приложения камеры при нажатии кнопки камеры?

Ответы [ 4 ]

6 голосов
/ 13 июня 2009

В вашем примере вам нужно вернуть true, чтобы сообщить, что вы «поглотили» событие. Как это:

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;
    }
});

Это также будет работать только в том случае, если фокус имеет videoPreview (или дочерний элемент). Таким образом, вы можете установить фокус по умолчанию:

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

или (предпочтительно) поместить слушателя в элемент верхнего уровня (например, a LinearLayout, RelativeLayout и т. Д.).

4 голосов
/ 07 декабря 2010

Как только кнопка камеры нажата, широковещательное сообщение отправляется всем приложениям, которые ее слушают. Вам необходимо использовать приемники Broadcast и функцию abortBroadcast (). Вы можете найти более подробную информацию об этом в ссылке ниже

http://suhassiddarth.blogspot.com/

3 голосов
/ 29 марта 2010

простой способ отключить кнопку камеры (или реагировать на нажатие) - добавить в свою деятельность следующее:

@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);
}
2 голосов
/ 13 июня 2009

Вы забыли вернуть true в вашем случае KeyEvent.KEYCODE_CAMERA ветку. Если вы вернете значение true, это означает, что Android израсходовал ключевое событие, и приложение «Камера» не должно запускаться. Все время возвращая false, все ключевые события передаются в обработчики по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...