我做了一个使用surfaceView显示相机preview.I得到了在开发者控制台,许多报告与surfaceChanged部分错误的应用程序:提高Android摄像头预览
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Parameters parameters = mCamera.getParameters(); //// (Line 127)
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
Camera.Size previewSize = previewSizes.get(4); //480h x 720w /// (Line 129)
parameters.setPreviewSize(previewSize.width, previewSize.height);
parameters.setFlashMode(Parameters.FLASH_MODE_AUTO);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
mCamera.setParameters(parameters);
Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
if(display.getRotation() == Surface.ROTATION_0)
{
parameters.setPreviewSize(height, width);
mCamera.setDisplayOrientation(90);
}
if(display.getRotation() == Surface.ROTATION_90)
{
parameters.setPreviewSize(width, height);
}
if(display.getRotation() == Surface.ROTATION_180)
{
parameters.setPreviewSize(height, width);
}
if(display.getRotation() == Surface.ROTATION_270)
{
parameters.setPreviewSize(width, height);
mCamera.setDisplayOrientation(180);
}
mCamera.startPreview();
}
第一个错误:
java.lang.IndexOutOfBoundsException (Line 129)
第二错误:
java.lang.NullPointerException (Line 127)
第三误差:
java.lang.RuntimeException: set display orientation failed (when rotating cam 90*)
大多数的错误报告是从三星Galaxy设备,但应用程序适用于LG的Nexus 4大 能有人给了表面的变化更稳定和可靠的方式来避免这样的错误?
这将有助于显着,如果你能指出哪些行127和129是 –
Derp,我没有看到指出这些线的评论。对不起 –