我正在运行一个使用surfaceView来显示Camera对象输出的应用程序,并且在拍照时需要设置自动闪光。我以为这可能很简单,但是我错了!
这是我的代码:
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Camera.Parameters params = mCamera.getParameters();
Camera.Size result = getBestPreviewSize(params, width, height);
params.setPreviewSize(result.width, result.height);
params.setPictureFormat(ImageFormat.JPEG);
params.setJpegQuality(100);
params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
params.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
params.setPictureSize(dpWidth, dpWidth);
params.setRotation(90);
mCamera.setParameters(params);
mCamera.startPreview();
}
并且清单具有正确的权限。当我启动代码时,这是错误:
06-17 13:54:48.260: E/AndroidRuntime(19901): FATAL EXCEPTION: main
06-17 13:54:48.260: E/AndroidRuntime(19901): Process: it.giozh.app, PID: 19901
06-17 13:54:48.260: E/AndroidRuntime(19901): java.lang.RuntimeException: setParameters failed
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.hardware.Camera.native_setParameters(Native Method)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.hardware.Camera.setParameters(Camera.java:1651)
06-17 13:54:48.260: E/AndroidRuntime(19901): at it.ictinnova.hipstamemostylist.ScattaFoto.surfaceChanged(TakePic.java:144)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.SurfaceView.updateWindow(SurfaceView.java:583)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.SurfaceView.access$000(SurfaceView.java:86)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:175)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1867)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.Choreographer.doCallbacks(Choreographer.java:574)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.Choreographer.doFrame(Choreographer.java:544)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.os.Handler.handleCallback(Handler.java:733)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.os.Handler.dispatchMessage(Handler.java:95)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.os.Looper.loop(Looper.java:136)
06-17 13:54:48.260: E/AndroidRuntime(19901): at android.app.ActivityThread.main(ActivityThread.java:5001)
06-17 13:54:48.260: E/AndroidRuntime(19901): at java.lang.reflect.Method.invokeNative(Native Method)
06-17 13:54:48.260: E/AndroidRuntime(19901): at java.lang.reflect.Method.invoke(Method.java:515)
06-17 13:54:48.260: E/AndroidRuntime(19901): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
06-17 13:54:48.260: E/AndroidRuntime(19901): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
06-17 13:54:48.260: E/AndroidRuntime(19901): at dalvik.system.NativeStart.main(Native Method)
怎么了?
最佳答案
从您的编码角度来看,这没什么错。其特定于供应商的问题。在某些设备中,设置参数在某些设备中无效。我发现附带的解决方案放在try catch块的代码行下面。我也建议您检查一下您要设置的所有参数,以检查相机不允许设置哪些参数。对我来说,设置高度和宽度失败。mCamera.setParameters(params);
检查您是否在清单中设置了这些功能android.hardware.camera.autofocus
android.hardware.camera.flash
如果找到其他解决方案,请添加评论。