interrupteur frontal/arrière de l'appareil photo à la volée

Si je n'utilise que CAMERA_FACING_BACK ou CAMERA_FACING_FRONT tous fonctionne bien.

J'ai de la difficulté avec le commutateur de CAMERA_FACING_BACK à CAMERA_FACING_FRONT.

Mon extrait de code:

public class PhotoCameraActivity extends Activity implements OnClickListener {
private SurfaceView cameraView;
private Button turnButton;
private Camera camera = null;
private Callback listener;
private static int camId = Camera.CameraInfo.CAMERA_FACING_BACK;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.photo_camera_main);
prepareActivity();
}
private void prepareActivity() {
cameraView = (SurfaceView) findViewById(R.id.photo_camera_surface_view);
turnButton = (ImageButton) findViewById(R.id.turn_button);
turnButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.equals(turnButton)) {
if (Camera.getNumberOfCameras() > 1 && camId < Camera.getNumberOfCameras() - 1) {
startCamera(camId + 1);
} else {
startCamera(Camera.CameraInfo.CAMERA_FACING_BACK);
}
} 
}
@Override
protected void onResume() {
startCamera(camId);
super.onResume();
}
@Override
protected void onPause() {
stopCamera();
super.onPause();
}
private void startCamera(int cameraId) {
if (camera != null) {
stopCamera();
}       
holder = cameraView.getHolder();
listener = new Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int           width, int height) {}
};
holder.addCallback(listener);
camId = cameraId;
camera = Camera.open(cameraId);
Camera.Parameters params = camera.getParameters();
if (cameraId == Camera.CameraInfo.CAMERA_FACING_BACK) {
params.setPreviewSize(1280, 800);
} else {
params.setPreviewSize(640, 480);
}
camera.setParameters(params);
}
private void stopCamera(){
System.out.println("stopCamera method");
if (camera != null){
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
holder.removeCallback(listener);
holder = null;
}
}
}
  • Quelle est la nature du "problème" que vous avez?
  • Si j'essaie d'arrêter la caméra, le viseur se fige et ne pas afficher une image à partir d'un autre appareil photo. Mais si j'appuie sur "Retour" puis de nouveau sur démarrer cette Activité, la caméra passe devant et il fonctionne bien à nouveau. Je pense que j'ai du mal avec l'arrêt de la caméra et de libérer les ressources.
  • j'ai coincé avec le même problème
  • vous pouvez avoir un seul appareil photo ouvert à un moment donc si vous voulez changer d'appareil photo premier appel de la caméra.recycler()
  • Ce code est wrong: ... face à la caméra n'est pas impérativement la même que la caméra de l'index. Par exemple, ma tablette a une seule caméra (indice: 0), mais face à l'avant (en face de l'indice: 1). Par conséquent, en utilisant le code simple comme Appareil photo.ouvert(CameraInfo.CAMERA_FACING_FRONT) est nonesense
  • entrez description du lien ici Ce libellé pour moi