Android:取消注册相机按钮

Nik*_*lin 5 camera android

我试图将一些动作绑定到相机按钮:

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;
    }
});
Run Code Online (Sandbox Code Playgroud)

然后按下按钮,应用程序崩溃,因为原始的Camera应用程序启动.

有没有人知道如何在按下相机按钮时防止相机应用程序启动?

Jer*_*gan 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;
    }
});
Run Code Online (Sandbox Code Playgroud)

它也只有在videoPreview(或子元素)具有焦点时才有效.因此,您可以将其设置为默认具有焦点:

@Override
public void onResume() {
    /* ... */
    videoPreview.requestFocus();
    super.onResume();
}
Run Code Online (Sandbox Code Playgroud)

或(者优先)把听者的顶层元素(例如,一个上LinearLayout,RelativeLayout等).