85 votes

Comment ouvrir la "caméra frontale" sur la plateforme Android ?

Plus généralement, si un appareil possède plus d'une caméra intégrée, y a-t-il un moyen d'initialiser l'une d'entre elles en particulier ?

Je ne l'ai pas trouvé dans la documentation de référence d'Android :

Le Samsung SHW-M100S possède deux caméras. S'il n'y a pas de référence pour utiliser deux caméras, une idée de comment Samsung a fait... ?

0 votes

114voto

Abhan Points 2661
private Camera openFrontFacingCameraGingerbread() {
    int cameraCount = 0;
    Camera cam = null;
    Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
    cameraCount = Camera.getNumberOfCameras();
    for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
        Camera.getCameraInfo(camIdx, cameraInfo);
        if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
            try {
                cam = Camera.open(camIdx);
            } catch (RuntimeException e) {
                Log.e(TAG, "Camera failed to open: " + e.getLocalizedMessage());
            }
        }
    }

    return cam;
}

Ajoutez les permissions suivantes dans le fichier AndroidManifest.xml fichier :

<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" />

Nota: Cette fonction est disponible à partir de la version Gingerbread (2.3) d'Android.

0 votes

Est-il possible de l'utiliser d'une manière ou d'une autre avec l'option Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); technique pour ouvrir l'application caméra existante ?

3 votes

@loeschg Intent gère l'action de la caméra à sa manière. Cette technique est utilisée lorsque vous utilisez SurfaceView pour exploiter les fonctionnalités de la caméra.

0 votes

C'est ce que je pensais. Merci.

10voto

CommonsWare Points 402670

Depuis Android 2.1, Android ne prend en charge qu'une seule caméra dans son SDK. Il est probable que cela sera ajouté dans une prochaine version d'Android.

1 votes

Cette déclaration est également valable pour Android 2.2 ?

2 votes

@ozmank : Oui, la prise en charge de plusieurs appareils photo n'a pas été ajoutée avant Android 2.3.

4voto

Mahesh Points 49
public void surfaceCreated(SurfaceHolder holder) {
    try {
        mCamera = Camera.open();
        mCamera.setDisplayOrientation(90);
        mCamera.setPreviewDisplay(holder);

        Camera.Parameters p = mCamera.getParameters();
        p.set("camera-id",2);
        mCamera.setParameters(p);   
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

3 votes

Bon fonctionnement sur le Galaxy S Important "camera-id" et non "camera_id".

3 votes

Ne partez jamais du principe qu'une rotation de 90 degrés vous permettra d'obtenir une rotation correcte pour un portrait. C'est différent sur de nombreux appareils.

2voto

Wesley Wiser Points 3676

Avec la sortie de Android 2.3 (Gingerbread), vous pouvez désormais utiliser la fonction android.hardware.Camera pour obtenir le nombre de caméras, des informations sur une caméra spécifique, et obtenir une référence à une caméra spécifique. Camera . Découvrez le nouveau Camera APIs aquí .

0voto

Camera camera;   
if (Camera.getNumberOfCameras() >= 2) {

    //if you want to open front facing camera use this line   
    camera = Camera.open(CameraInfo.CAMERA_FACING_FRONT);

    //if you want to use the back facing camera
    camera = Camera.open(CameraInfo.CAMERA_FACING_BACK);                
}

try {
    camera.setPreviewDisplay("your surface holder here");
    camera.startPreview();      
} catch (Exception e) {  
    camera.release();
}

/* Ce n'est pas la bonne méthode, c'est une solution pour les anciens appareils fonctionnant sous Android 4.0 ou plus. Cela peut être utilisé à des fins de test, mais n'est pas recommandé pour le développement principal. Cette solution ne peut être considérée que comme une solution temporaire. Mais cette solution a aidé beaucoup de personnes, donc je n'ai pas l'intention de supprimer cette réponse*/.

7 votes

Je ne pense pas que l'utilisation soit documentée. open(int id) accepte l'id, pas la position de la caméra.

13 votes

Veuillez supprimer cette réponse trompeuse

0 votes

@AlexCohn Pouvez-vous expliquer pourquoi cette réponse devrait être supprimée ? Il semble que beaucoup d'entre eux soient d'accord avec cette réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X