问题1, 摄像头设置自动对焦后,不能自动对焦的情况 或者出现
java.lang.RuntimeException: autoFocus failed
at android.hardware.Camera.native_autoFocus的问题
代码:
private final Camera.AutoFocusCallback mAutoFocusCallback = new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
if (success && isPreviewing()) {
mCamera.setOneShotPreviewCallback(mPreviewCallback);
} else {
mCameraAutoFocusHandler.sendEmptyMessageDelayed(MSG_DO_AUTO_FOCUS, TIME_BETWEEN_CAPTURE);
}
}
};
private final Handler mCameraAutoFocusHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_DO_AUTO_FOCUS:
if (mCamera != null) {
mCamera.autoFocus(mAutoFocusCallback);
}
break;
}
}
};
不能预览的原因:如果mCamera.setPreviewDisplay(holder); 设置的地方不对,在创建surfaceView时他的完成时间可能会晚于AutoFocus的时间, 会出现不能自动对焦的问题
解决方法:可以在第一次
mCameraAutoFocusHandler.sendEmptyMessageDelayed(MSG_DO_AUTO_FOCUS,
TIME_BETWEEN_CAPTURE
)设置一个delay时间,就可以完美解决
另外:为了避免一系列问题的出现,一般在
@Override
public void surfaceCreated(SurfaceHolder holder) {} 中setPreviewDisplay(holder)操作, 除非绕不开,否则尽量不要保存holder