Я хотел бы переключиться между задней и передней камерой для записи видео. Это мой код:Не удалось подключиться к службе камеры в Android
public void surfaceCreated(SurfaceHolder holder) {
if (usecamera) {
camera = Camera.open(0);
camera.setDisplayOrientation(90);
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
previewRunning = true;
}
catch (IOException e) {
Log.e(LOGTAG,e.getMessage());
e.printStackTrace();
}
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (!recording && usecamera) {
if (previewRunning){
camera.stopPreview();
}
try {
Camera.Parameters p = camera.getParameters();
p.setPreviewSize(camcorderProfile.videoFrameWidth, camcorderProfile.videoFrameHeight);
camera.setParameters(p);
camera.setPreviewDisplay(holder);
camera.startPreview();
previewRunning = true;
}
catch (IOException e) {
Log.e(LOGTAG,e.getMessage());
e.printStackTrace();
}
prepareRecorder();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
if (recording) {
recorder.stop();
recording = false;
}
recorder.release();
if (usecamera) {
previewRunning = false;
//camera.lock();
camera.release();
}
}
В первом случае предварительный просмотр задней камеры правильна, но ошибка при попытке изменить камеру:
Кнопка для изменения:
changeCamera.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (Camera.getNumberOfCameras()>=2) {
camera.stopPreview();
camera.release();
//"which" is just an integer flag
switch (which) {
case 0:
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
which = 1;
break;
case 1:
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
which = 0;
break;
}
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException exception) {
camera.release();
camera = null;
}
}
}
});
Пожалуйста, разместите сообщения, которые вы видите в logcat. Вероятно, есть не только стек исключений вашего приложения, но и некоторые сообщения об ошибках от службы камеры. –