2012-03-13 23 views
27

Sto usando l'intento di aprire la fotocamera con l'applicazione nativa:Come avviare la fotocamera frontale con intenzione?

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

Ogni volta che la fotocamera che si apre (fronte/retro della fotocamera) è come l'ultima volta che l'applicazione fotocamera nativa era aperta. Ciò significa che se l'ultima volta che ho chiuso l'applicazione nativa della fotocamera era attiva la fotocamera posteriore, quindi quando lancio l'intento per la fotocamera, la fotocamera posteriore sarà attiva.

Voglio avviare direttamente la fotocamera anteriore con l'intento. Qualcuno sa come farlo?

+1

questo collegamento potrebbe essere di aiuto completo http://stackoverflow.com/questions/2779002/how-to-open-front-camera-on-android-platform – Triode

+0

È fatto lì senza un intento. Grazie comunque – Yaniv

+0

@ Yaniv, hai avuto la soluzione per questo? – honey

risposta

0

Hai provato a guardare adb logcat mentre si passa alla fotocamera anteriore nell'applicazione fotocamera nativa? Se è effettivamente un'altra attività, allora verrà mostrata come tale lì e potrai semplicemente copiare l'intento nella tua applicazione. Se non si presenta, sei sfortunato, immagino.

+0

Non c'è nulla di rilevante sul logcat. Grazie comunque. – Yaniv

2

Non c'è intenzione (AFAIK) che si rivolge in modo specifico alla fotocamera frontale.

Per farlo a livello di programmazione: Android SDK < = 2,2 supporta solo l'uso di una singola telecamera (la prima fotocamera posteriore). Per 2.3+, puoi passare attraverso le telecamere e capire quale è quella frontale (se disponibile). Sarebbe qualcosa di simile ...

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

Questo esempio è solo scheletrico e non fornisce alcuna (molto necessaria) gestione degli errori.

EDIT: È inoltre necessario aggiungere questi alla vostra manifesta:

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

Conosco questo codice come hai scritto tu. Ma devo farlo con un intento. Grazie comunque. – Yaniv

+0

Sto ottenendo "Fotocamera non riuscita ad aprire: Impossibile connettersi al servizio fotocamera" in un dispositivo Samsung (versione 4.04 di Android). –

30

Parola di cautela: la sua un hack

Aggiungere questo al

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

Questa soluzione intento isn' t sostenibile, utilizzando un codice di prova dell'app Fotocamera. Per maggiori informazioni guarda il metodo statico "getCameraFacingIntentExtras" nella classe Util del progetto AOSP Camera.

Aggiornamento: Sembra che sia stata disattivata L

+0

Definitivamente un hack, ma funziona sul Galaxy Nexus. – Brandon

+0

Ho provato questo ma non ha funzionato, puoi farmi fottere ?? – LuminiousAndroid

+0

funziona per nexus 5 –

0

Prova questa:

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

Tratto da scorciatoia di Google fotocamera per Android 7.1 (ma dovrebbe funzionare con androidi più anziani)

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

Quindi, combinato con le risposte precedenti, questo funziona per me su tutti i telefoni potrei averlo provato su

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

non funziona per samsung galaxy j7 – VishAl

+0

Non funziona in MOTO:/ –

+0

Non funziona moto G4 plus (7.0) –

Problemi correlati