Cambiar entre las cámaras frontal y posterior

Estoy usando la cámara de ejemplo google y funciona bien.

Pero, ¿cómo puedo cambiar la cámara entre la parte posterior y frontal con un botón?

private void setUpCameraOutputs(int width, int height) { Activity activity = getActivity(); CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE); try { for (String cameraId : manager.getCameraIdList()) { CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); // We don't use a front facing camera in this sample. Para trocar, colocar != no lugar de ==. if (characteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT) { continue; } StreamConfigurationMap map = characteristics.get( CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); // For still image captures, we use the largest available size. Size largest = Collections.max( Arrays.asList(map.getOutputSizes(ImageFormat.JPEG)), new CompareSizesByArea()); mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), ImageFormat.JPEG, /*maxImages*/2); mImageReader.setOnImageAvailableListener( mOnImageAvailableListener, mBackgroundHandler); // Danger, WR! Attempting to use too large a preview size could exceed the camera // bus' bandwidth limitation, resulting in gorgeous previews but the storage of // garbage capture data. mPreviewSize = chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class), width, height, largest); // We fit the aspect ratio of TextureView to the size of preview we picked. int orientation = getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_LANDSCAPE) { mTextureView.setAspectRatio( mPreviewSize.getWidth(), mPreviewSize.getHeight()); } else { mTextureView.setAspectRatio( mPreviewSize.getHeight(), mPreviewSize.getWidth()); } mCameraId = cameraId; return; } } catch (CameraAccessException e) { e.printStackTrace(); } catch (NullPointerException e) { // Currently an NPE is thrown when the Camera2API is used but not supported on the // device this code runs. new ErrorDialog().show(getFragmentManager(), "dialog"); } } 

 @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_switch_camera: closeCamera(); if (mCameraId.equals("0")) { mCameraId = "1"; } else { mCameraId = "0"; } CameraManager cameraManager = (CameraManager) Camera2Demo.this.getSystemService(Context.CAMERA_SERVICE); try { cameraManager.openCamera(mCameraId, mCameraDeviceStateCallback, mHandler); } catch (CameraAccessException e) { e.printStackTrace(); } break; } } 

y la función "closeCamera ()" aquí

  private void closeCamera() { mSession.close(); mSession = null; mCameraDevice.close(); mCameraDevice = null; } 
  • SetRotationY () width API10 en Android
  • Algunos fragmentos se pierden en rotación
  • Android: gira todo el diseño
  • Android: Obtener rotación EXIF ​​desde URI
  • DialogFragment en Fragmento con rotación de pantalla
  • ¿Cómo detectar el paisaje izquierdo (normal) contra el derecho del paisaje (reverso) con la ayuda para los dispositivos naturales del paisaje?
  • Cómo actualizar match_parent en un linearLayout después de usar setRotation?
  • ¿La imagen resultante de la cámara Android debe girarse después de la captura?
  • Fragmentos desaparecen cuando se rotan
  • Zoom de Android y rotación de la vista de imagen
  • Cómo rotar el mapa de bits correctamente?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.