No se puede conectar al servicio de cámara cuando se utiliza ACTION_IMAGE_CAPTURE

Estoy usando el siguiente código para decirle al sistema que quiero tomar una foto:

Intent intent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE, null); intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri .fromFile(new File(filePath))); startActivityForResult(intent, TAKE_PHOTO_ACTIVITY); 

Funciona como un campeón, la primera vez. Los intentos subsiguientes producen la siguiente excepción:

E / CameraHolder (8300): java.lang.RuntimeException: No se puede conectar al servicio de cámara E / CameraHolder (8300): en android.hardware.Camera.native_setup (Método nativo) E / CameraHolder (8300): en android.hardware. Cámara (Camera.java:110) E / CameraHolder (8300): en android.hardware.Camera.open (Camera.java:90) E / CameraHolder (8300): en com.android.camera.CameraHolder.open (CameraHolder .java: 100) E / CameraHolder (8300): en com.android.camera.Camera.ensureCameraDevice (Camera.java:1626) E / CameraHolder (8300): en com.android.camera.Camera.startPreview (Camera.java : 1686) E / CameraHolder (8300): en com.android.camera.Camera.access $ 5800 (Camera.java:94) E / CameraHolder (8300): en com.android.camera.Camera $ 5.run (Camera.java : 949) E / CameraHolder (8300): en java.lang.Thread.run (Thread.java:1096)

Me imagino que tengo que liberar de alguna manera el objeto de la cámara, pero como no lo estoy adquiriendo directamente, no tengo idea de cómo hacer esto. ¿Alguien me puede ayudar?

No es necesario liberar el objeto de la cámara – es incluso imposible porque no tiene un identificador para ello. Este objeto se libera dentro de la actividad de captura que está llamando.

¿Siempre está utilizando la misma ruta de acceso de archivo? Si es así intenta generar una única cada vez. Si esto no ayuda, parece evidentemente como un error específico del dispositivo.

 Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 

Para llamar a la actividad predeterminada de la cámara.

Y use el siguiente código para recuperar la imagen que acaba de tomar:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAMERA_PIC_REQUEST) { Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); ImageView image = (ImageView) findViewById(R.id.photoResultView); image.setImageBitmap(thumbnail); } } 

Y agregue permiso en su archivo de manifiesto

 <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.CAMERA"></uses-permission> 

Espero que este trabajo para usted.

También tuve el mismo problema. Entonces me ocurrió esta solución, y está funcionando bien para mí.

Cuando llama a la actividad de la cámara, en EXTRA_OUTPUT pasa un Uri de un archivo temporal en la tarjeta de almacenamiento. Cuando la actividad de la cámara regrese, en el método de devolución de llamada onActivityResult (), obtenga ese archivo temporal creado anteriormente y agregelo al MediaStore. Al final, elimine el archivo temporal.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.