Android:取消注册相机按钮

时间:2009-06-12 13:18:59

标签: android camera

我尝试将某些操作绑定到相机按钮:

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 个答案:

答案 0 :(得分:6)

在你的例子中,你需要返回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();
}

或(首选)将侦听器放在顶级元素上(例如,LinearLayoutRelativeLayout等。

答案 1 :(得分:4)

按下相机按钮后,会向收听它的所有应用程序发送广播消息。您需要使用广播接收器和abortBroadcast()函数。 您可以在以下链接中找到有关此内容的更多详细信息

http://suhassiddarth.blogspot.com/

答案 2 :(得分:3)

禁用相机按钮(或点击后反应)的一种简单方法是将以下内容添加到您的活动中:

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

答案 3 :(得分:2)

您忘记在案例true分支中返回KeyEvent.KEYCODE_CAMERA。如果您返回true,则向Android发出已消耗键事件的信号,并且不应启动Camera应用程序。通过始终返回false,所有关键事件都会向上传递给默认处理程序。