У меня есть приложение для Android, которое работает с камерой.Поэтому после нескольких попыток я начал создавать свою собственную камеру, создав класс, который реализует SurfaceHolder.Callback
.Большая проблема во всем этом заключается в том, что в моем методе surfaceChanged()
, когда я пытаюсь установить параметры для камеры, я получаю: FORCE CLOSE.
Вот как выглядит мой метод:
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Log.e(TAG, "surfaceChanged");
if (mPreviewRunning) {
mCamera.stopPreview();
}
Camera.Parameters p = mCamera.getParameters();
List<Size> sizes = p.getSupportedPictureSizes();
System.out.println("Lista de parametrii este urmatoarea:"+sizes);
Size size = sizes.get(0);
p.setPictureSize(size.width, size.height);
p.setPreviewSize(w, h);
mCamera.setParameters(p);
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mCamera.startPreview();
mPreviewRunning = true;
}
Если я попытаюсь описанным выше способом:
Camera.Parameters p = mCamera.getParameters();
List<Size> sizes = p.getSupportedPictureSizes();
Size size = sizes.get(0);
p.setPictureSize(size.width, size.height);
Тогда size
будет null
, и я получу ошибку в этой строке:
Size size = sizes.get(0);
Если я сделаю этоспособ:
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
Log.e(TAG, "surfaceChanged");
if (mPreviewRunning) {
mCamera.stopPreview();
}
Camera.Parameters p = mCamera.getParameters();
p.setPreviewSize(w, h);
mCamera.setParameters(p);
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mCamera.startPreview();
mPreviewRunning = true;
}
Я получаю следующую ошибку:
FATAL EXCEPTION: main
java.lang.RuntimeException: setParameters failed
at android.hardware.Camera.native_setParameters(Native Method)
at android.hardware.Camera.setParameters(Camera.java:914)
at com.SplashScreen.EditPhoto.surfaceChanged(EditPhoto.java:535)
at android.view.SurfaceView.updateWindow(SurfaceView.java:554)
at android.view.SurfaceView.dispatchDraw(SurfaceView.java:353)
at android.view.ViewGroup.drawChild(ViewGroup.java:1719)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1448)
at android.view.ViewGroup.drawChild(ViewGroup.java:1719)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1448)
at android.view.View.draw(View.java:6971)
at android.widget.FrameLayout.draw(FrameLayout.java:361)
Так, как правильно установить параметры? Спасибо!
РЕДАКТИРОВАТЬ : Вот как я создаю свою камеру:
public void surfaceCreated(SurfaceHolder holder) {
Log.e(TAG, "surfaceCreated");
mCamera = Camera.open();
}