我尝试将某些操作绑定到相机按钮:
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应用程序启动了。
有人知道如何在按下相机按钮时阻止相机应用程序启动吗?
答案 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();
}
或(首选)将侦听器放在顶级元素上(例如,LinearLayout
,RelativeLayout
等。
答案 1 :(得分:4)
按下相机按钮后,会向收听它的所有应用程序发送广播消息。您需要使用广播接收器和abortBroadcast()函数。 您可以在以下链接中找到有关此内容的更多详细信息
答案 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,所有关键事件都会向上传递给默认处理程序。