web-dev-qa-db-fra.com

Comment lancer la caméra frontale avec intention?

J'utilise l'intention d'ouvrir la caméra avec l'application native:

    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);

Chaque fois que la caméra ouverte (caméra avant/arrière) ressemble à la dernière fois que cette application de caméra native a été ouverte. Cela signifie que si la dernière fois que j'ai fermé l'application de caméra native, la caméra arrière était active, la caméra arrière sera donc active au lancement de l'objectif pour la caméra.

Je veux lancer directement la caméra frontale avec l'intention. Est-ce que quelqu'un sait comment faire ça?

30
Yaniv

Mot d'avertissement: c'est un hack

Ajoutez ceci à l'intention

intent.putExtra("Android.intent.extras.CAMERA_FACING", 1);

Cette solution n'est pas durable, elle utilise un code de test de l'application Camera. Pour plus d'informations, consultez la méthode statique "getCameraFacingIntentExtras" dans la classe Util du projet de caméra AOSP.

Mise à jour: On dirait qu'il a été désactivé en L

32
user213493

Tiré du raccourci de Google Camera pour Android 7.1 (mais devrait fonctionner avec les androïdes plus anciens)

intent.putExtra("Android.intent.extra.USE_FRONT_CAMERA", true);

Donc, combiné avec les réponses précédentes, cela fonctionne pour moi sur tous les téléphones sur lesquels je pourrais le tester.

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);
8
Pitel

Il n'y a pas d'intention (AFAIK) qui cible spécifiquement la caméra frontale. 

Pour le faire par programme: Android SDK <= 2.2 ne prend en charge que l’utilisation d’une seule caméra (la première caméra orientée vers l’arrière). Pour les versions 2.3+, vous pouvez faire une boucle entre les caméras et déterminer laquelle est celle qui fait face à l'avant (si disponible). Ce serait quelque chose comme ...

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 ...

Cet exemple n’est que squelettique et ne fournit aucune gestion des erreurs (indispensable).

EDIT: Vous devez également ajouter ces éléments à votre manifeste:

<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" />
3
Chris Cashwell

Essaye ça:

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);
}
0
Kishan Vaghela