La intención no establece los parámetros de la cámara

Estoy abriendo la aplicación de la cámara como una intención externa de mis aplicaciones. Estoy usando el siguiente código para invocar la cámara y las siguientes son mis condiciones:

  1. Debería abrir la cámara frontal.
  2. La más alta calidad de imagen.
  3. La luz del flash debe estar encendida

Lo siguiente es mi código:

Intent action = new Intent("android.media.action.IMAGE_CAPTURE"); action.putExtra("android.intent.extras.CAMERA_FACING", 1); action.putExtra("android.intent.extras.FLASH_MODE_ON", 1); action.putExtra("android.intent.extras.QUALITY_HIGH", 1); 

Ahora, abre la cámara frontal PERO no enciende el flash y no establece la calidad de la imagen en alto.

La sección de permisos de mi archivo Manifest tiene el siguiente aspecto:

      

¿Hay algo de lo que me estoy perdiendo?

Desafortunadamente, cuando se usa la cámara con Intent, el único parámetro extra que puede establecer es

 MediaStore.EXTRA_OUTPUT 

P.ej

 fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name 

Lo cual le permite mapear donde la aplicación de cámara almacenará la imagen.

El objective adicional de Camera Facing puede funcionar a veces:

 action.putExtra("android.intent.extras.CAMERA_FACING", 1); 

Al buscar en los archivos fuente de Android, hay algunos métodos de “prueba” que están en el archivo de la clase Util pero no documentados oficialmente:

(Util)

 private static final String EXTRAS_CAMERA_FACING = "android.intent.extras.CAMERA_FACING"; // This is for test only. Allow the camera to launch the specific camera. public static int getCameraFacingIntentExtras(Activity currentActivity) { int cameraId = -1; int intentCameraId = currentActivity.getIntent().getIntExtra(Util.EXTRAS_CAMERA_FACING, -1); if (isFrontCameraIntent(intentCameraId)) { // Check if the front camera exist int frontCameraId = CameraHolder.instance().getFrontCameraId(); if (frontCameraId != -1) { cameraId = frontCameraId; } } else if (isBackCameraIntent(intentCameraId)) { // Check if the back camera exist int backCameraId = CameraHolder.instance().getBackCameraId(); if (backCameraId != -1) { cameraId = backCameraId; } } return cameraId; } 

Y en el fotomódulo, se usa el siguiente método:

(PhotoModule)

 private int getPreferredCameraId(ComboPreferences preferences) { int intentCameraId = Util.getCameraFacingIntentExtras(mActivity); if (intentCameraId != -1) { // Testing purpose. Launch a specific camera through the intent // extras. return intentCameraId; } else { return CameraSettings.readPreferredCameraId(preferences); } } 

Y cuando la aplicación de la cámara inicializa el modo de fotografía, llama a este método para verificar qué cámara usar:

 mCameraId = getPreferredCameraId(mPreferences); 
 intent.putExtra("android.intent.extras.CAMERA_FACING", android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT); 

este es un bash de iniciar la captura con la cámara frontal en lugar de la cámara trasera predeterminada.

esto funciona como se usa en este popular plugin de cordova en este enlace en la línea 145: https://github.com/EddyVerbruggen/VideoCapturePlus-PhoneGap-Plugin/blob/master/src/android/nl/xservices/plugins/videocaptureplus/ VideoCapturePlus.java

Espero que esto ayude a cualquiera que tenga el mismo problema.

también, ¿sabes si puedes establecer un bash de desactivar los controles de la cámara (filtros, cambiar entre cámaras … etc) para que no se muestren?