我正在Android中开发一个相机应用程序(不使用意图),我正在实现自动对焦和闪光灯功能。如果我实现任何一个功能,它工作正常。但是在添加自动对焦和闪光灯功能时,它可以在LG nexus和其他拥有Flash Light的手机中强行关闭。我使用以下代码进行自动对焦和闪光灯。
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
{
event.startTracking();
camera.autoFocus(autoFocusCallback);
Parameters p = camera.getParameters();
p.setFocusMode(Parameters.FOCUS_MODE_AUTO);
if(this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH))
{
p.setFlashMode(Parameters.FLASH_MODE_ON);
camera.setParameters(p);
camera.startPreview();
camera.takePicture(shutterCallback, rawCallback, jpgCallback);
}
else
{
camera.startPreview();
camera.takePicture(shutterCallback, rawCallback, jpgCallback);
}
return true;
}
return super.onKeyDown(keyCode, event);
}
private AutoFocusCallback autoFocusCallback = new AutoFocusCallback()
{
@Override
public void onAutoFocus(boolean autoFocusSuccess, Camera camera)
{
camera.takePicture(shutterCallback, rawCallback, jpgCallback);
if (autoFocusHandler != null)
{
Message message = autoFocusHandler.obtainMessage(autoFocusMessage, success);
autoFocusHandler.sendMessageDelayed(message, AUTOFOCUS_INTERVAL_MS);
autoFocusHandler = null;
}
else
{
}
}
};
这是我得到的错误日志。
可能是什么问题。请帮忙!谢谢!
答案 0 :(得分:0)
刚刚快速阅读了相机文档,看起来你已经错过了Surface Holder。
重要提示:将完全初始化的SurfaceHolder传递给 setPreviewDisplay(SurfaceHolder)。没有表面,相机会 无法开始预览。
仔细阅读文档:http://developer.android.com/reference/android/hardware/Camera.html
这是一个答案,显示如何使用它: https://stackoverflow.com/a/3964460/2045570