2016-04-26 60 views
0

在我的Android应用中,对焦模式设置为FOCUS_MODE_CONTINUOUS_PICTURE.。下面是一些相关的代码:安卓相机自动对焦在一段时间后停止工作

private Camera.AutoFocusCallback _cbAutoFocus = new Camera.AutoFocusCallback() { 

    private int _count = 0; 
    @Override 
    public void onAutoFocus(boolean success, Camera camera) { 
     if (success) { 
      _count++; 
      if ((_count % 500) == 0) { 
       Log.d("MyCam Focus", Integer.toString(_count)); 
      } 
      _camera.cancelAutoFocus(); 
     } 
     _camera.autoFocus(_cbAutoFocus); 
    } 
}; 

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 

    try { 
     if (this._camera != null) { 
      this._camera.setPreviewDisplay(holder); 
      this._camera.startPreview(); 
      this._camera.autoFocus(this._cbAutoFocus); 
     } 
    }catch(Exception e) { 
     Log.e("Camera Surface change", e.getMessage()); 
    } 
} 

当我移动相机对一些印刷文本,相机似乎自动对焦正常了一段时间。然而,一段时间后,它停止了关注,我的onAutoFocus代码中没有成功。想知道是否有人有任何见解。问候。

回答

0

事实证明,即使设备支持,FOCUS_MODE_CONTINUOUS_PICTURE或FOCUS_MODE_CONTINUOUS_VIDEO也不会始终工作。看来最好使用FOCUS_MODE_AUTO,并且每次需要重点时手动调用autofocus()

0

你在API documentation看到这一点:?

的应用程序可以在此模式下自动对焦调用(AutoFocusCallback)。如果 自动对焦正在扫描中,则焦点回调将在完成时返回 。如果自动对焦未扫描,焦点 回调将立即返回一个布尔值,指示 焦点是否锐利。应用程序可以决定是否想要立即拍摄照片或将对焦模式更改为自动,并且 将运行完整的自动对焦周期。 对焦位置在 自动对焦调用后锁定。如果应用程序想要重新开始连续对焦,则必须调用cancelAutoFocus 。重新启动预览将不会恢复连续自动对焦 。要停止连续对焦,应用程序 应将对焦模式更改为其他模式。

看起来,当autoFocus方法被调用时,自动对焦被锁定。致电cancelAutoFocus恢复自动对焦。

在onAutoFocus中,在方法结束时(不管成功与否),调用autoFocus,这将调焦,然后锁定焦点,无论摄像机有任何进一步移动。这是故意的吗?

+0

如果我不再调用autofocus(),我的回调在第一次运行后从不被调用。 – Peter

相关问题