Android:取消注册相机按钮
Posted
技术标签:
【中文标题】Android:取消注册相机按钮【英文标题】:Android: Unregister camera button 【发布时间】:2010-11-02 11:07:58 【问题描述】:我尝试将一些动作绑定到相机按钮:
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;
);
按下按钮后应用程序崩溃了,因为原来的相机应用程序启动了。
有谁知道如何防止按下相机按钮时启动相机应用程序?
【问题讨论】:
【参考方案1】:在您的示例中,您需要返回 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
等)。
【讨论】:
【参考方案2】:只要按下相机按钮,就会向所有监听它的应用程序发送一条广播消息。您需要使用广播接收器和 abortBroadcast() 函数。 您可以在以下链接中找到更多详细信息
http://suhassiddarth.blogspot.com/
【讨论】:
【参考方案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);
【讨论】:
【参考方案4】:您忘记在您的情况下返回 true
KeyEvent.KEYCODE_CAMERA
分支。如果您返回 true,则向 android 发出您已使用该键事件的信号,并且不应启动 Camera 应用程序。通过一直返回 false,所有关键事件都会向上传递给默认处理程序。
【讨论】:
以上是关于Android:取消注册相机按钮的主要内容,如果未能解决你的问题,请参考以下文章
Android ACTION_IMAGE_CAPTURE意图