我试图将一些动作绑定到相机按钮:
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应用程序启动.
有没有人知道如何在按下相机按钮时防止相机应用程序启动?
在您的示例中,您需要返回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等).