2011-07-31 35 views
9

He intentado hacer una aplicación que puede activar y desactivar el flash de mi cámara. El código que tengo atm se ve así:java.lang.RuntimeException: no se pudo conectar al servicio de la cámara

Camera flash; 
Camera.Parameters params; 

flash = Camera.open(); 
params = flash.getParameters(); 

params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);   
flash.setParameters(params); 

Y en el manifiesto XML:

<permission android:name="android.permission.FLASHLIGHT" 

android:permissionGroup="android.permission-group.HARDWARE_CONTROLS" 
      android:protectionLevel="normal" /> 

<permission android:name="android.permission.CAMERA"> </permission> 

Cada vez que ejecuta el código, la aplicación se bloquea en "Flash = Camera.open();" con este error:

java.lang.RuntimeException: Fail to Connect to camera service

¿Qué estoy haciendo mal?

+5

A pesar de los problemas de formateo con la parte manifiesta que diría que usted tiene que utilizar <-utiliza el permiso /> etiquetas en lugar de los de la linterna y la cámara. También para dejar esto en claro, publique la parte del manifiesto correctamente formateada (y probablemente toda la pila de registros, si se trata de un problema de permiso, debe haber una pista antes de la excepción en el logcat). –

+0

¡Gracias, eso me ayudó mucho! – gethan

Respuesta

34

Para acceder a la cámara del dispositivo, debe declarar el permiso cámara en su manifiesto de Android como este,

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

eso no es totalmente cierto, no necesita la etiqueta uses-features para acceder a la cámara: los elementos "Declarated son solo informativos, lo que significa que el sistema Android no comprueba si hay compatibilidad de funciones en el dispositivo antes Sin embargo, otros servicios (como Google Play) o aplicaciones pueden verificar las declaraciones de su aplicación como parte del manejo o la interacción con su aplicación. " http://developer.android.com/guide/ topics/manifest/uses-feature-element.html – stoefln

1

Por lo general, este problema se debe a la falta solicitar permiso de la cámara, como ya se ha dicho por otros usuarios.

Pero, sólo para registrar aquí otra causa, si se intenta abrir la cámara mediante una cameraID que no existe, recibirá el mismo error

java.lang.RuntimeException: Fail to Connect to camera service

7

Es posible que haya olvidado de llamar a la liberación en onDestroy

Por ejemplo:

@Override 
protected void onDestroy() { 
    if (mCamera != null) { 
     mCamera.release(); 
    } 
    super.onDestroy(); 
} 
1

es necesario agregar el nuevo permiso de solicitud en 6.x androide mediante programación antes.

private static final int MY_PERMISSIONS_REQUEST_CAMERA = 555; 

if (ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(getActivity(), new String[]{android.Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); 
     } else { 
      IntentIntegrator.forSupportFragment(this).initiateScan(); 
     } 

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_CAMERA: { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       IntentIntegrator.forSupportFragment(this).initiateScan(); 
      } else { 
       FragmentHelper.popFragment(getActivity(), null, null); 
      } 
     } 
    } 
} 
Cuestiones relacionadas