android - tomar - ¿Cómo lanzar la cámara frontal con intención?
lanzar camara android (5)
Estoy usando la intención de abrir la cámara con la aplicación nativa:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri photoUri = Uri.fromFile(getOutputPhotoFile());
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(intent, CAMERA_PHOTO_REQUEST_CODE);
Cada vez que se abre la cámara (cámara frontal / trasera) es como la última vez que se abrió esta aplicación nativa de cámara. Lo que significa que si la última vez que cerré la aplicación de cámara nativa, la cámara trasera estaba activa, de modo que cuando inicie la intención de la cámara, la cámara trasera estará activa.
Quiero lanzar directamente la cámara frontal con la intención. ¿Alguien sabe cómo hacer eso?
¿Ha intentado ver adb logcat
mientras cambiaba a la cámara frontal en su aplicación de cámara nativa? Si es otra actividad, entonces aparecerá como tal y simplemente podrá copiar la intención en su aplicación. Si no aparece, estás de suerte, supongo.
No hay intención (AFAIK) que apunte específicamente a la cámara frontal.
Para hacerlo mediante programación: Android SDK <= 2.2 solo admite el uso de una sola cámara (la primera cámara orientada hacia atrás). Para las versiones 2.3+, puede recorrer las cámaras y determinar cuál es la frontal (si está disponible). Sería algo así como ...
Camera cam = null;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
for (int camNo = 0; camNo < Camera.getNumberOfCameras(); camNo++) {
CameraInfo camInfo = new CameraInfo();
Camera.getCameraInfo(camNo, camInfo);
if (camInfo.facing.equals(Camera.CameraInfo.CAMERA_FACING_FRONT)) {
cam = Camera.open(camNo);
}
}
if (cam == null) {
// no front-facing camera, use the first back-facing camera instead.
// you may instead wish to inform the user of an error here...
cam = Camera.open();
}
// ... do stuff with Camera cam ...
Este ejemplo es solo esquelético y no proporciona ningún manejo de errores (muy necesario).
EDITAR: También es necesario agregar estos a su manifiesto:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.front" android:required="false" />
Prueba esto:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
intent.putExtra("android.intent.extras.LENS_FACING_FRONT", 1);
} else {
intent.putExtra("android.intent.extras.CAMERA_FACING", 1);
}
Tomado del acceso directo de Google Camera para Android 7.1 (pero debería funcionar con Android más antiguos)
intent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true);
Entonces, combinado con las respuestas anteriores, esto me funciona en todos los teléfonos en los que podría haberlo probado.
intent.putExtra("android.intent.extras.CAMERA_FACING", android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT);
intent.putExtra("android.intent.extras.LENS_FACING_FRONT", 1);
intent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true);
Una advertencia: es un hack
Agrega esto a la intención
intent.putExtra("android.intent.extras.CAMERA_FACING", 1);
Esta solución no es sostenible, utiliza un código de prueba de la aplicación Camera. Para obtener más información, consulte el método estático "getCameraFacingIntentExtras" en la clase Util del proyecto de cámara AOSP.
Actualización: Parece que fue deshabilitado en L