seleccionar - android java lang runtimeexception no se conecta al servicio de la cámara
permisos camara android studio (12)
Actualmente estoy trabajando en encender / apagar linterna. Recibo este error java.lang.RuntimeException: Fail to connect to camera service
No sé por qué ocurre este error. Me referí a muchas soluciones, pero mi problema aún no estaba resuelto. Cuando la linterna está encendida, el error no ocurre, pero cuando la linterna está apagada, se produce el error.
Código principal de mi código
Mi permiso de manifiesto:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus"/>
En mi proyecto de Android tiene el mismo problema. Este es mi error Logcat
03-29 19: 26: 04.194 224-608 /? V / EmulatedCamera_BaseCamera: getCameraInfo 03-29 19: 26: 04.196 224-224 /? I / CameraService: CameraService :: connect call (PID -1 "com.proitzen.staffapp", ID de cámara 1) para la versión HAL por defecto y Camera API versión 1 03-29 19: 26: 04.196 224-224 /? W / ServiceManager: Error de permiso: android.permission.CAMERA from uid = 10067 pid = 1776 03-29 19: 26: 04.196 224-224 /? E / CameraService: denegación de permiso: no se puede utilizar la cámara pid = 1776, uid = 10067 03-29 19: 26: 04.196 1776-1776 / com.proitzen.staffapp W / CameraBase: Se ha producido un error al conectar la cámara 1: Servicio no disponible 03-29 19: 26: 04.200 1776-1776 / com.proitzen.staffapp D / AndroidRuntime: Apagar VM
Ninguna de las soluciones anteriores funcionó para mí. Mi aplicación para Android funcionó en dispositivos físicos con Android y solo proporcionó el error anterior en Genymotion.
Solución: inicie su configuración de emulador Genumotion -> Aplicaciones ---> elija su aplicación -> Permisos -> active la cámara y el micrófono y el almacenamiento.
Este problema puede surgir en Android 6.0 si no habilitó el permiso de la cámara para su aplicación. A partir de Android 6.0, puede manejar el tiempo de permiso de la aplicación que dará o no permiso específico para una aplicación.
Por lo tanto, debe habilitar el permiso desde la settings->apps->your_app->enable camera permission
si aún no está habilitado.
Hola, espero que estés lidiando con un tipo de aplicación de antorcha o algo relacionado con el flash y hubo muchas discusiones sobre esto antes y aquí hay algunos enlaces útiles y tutoriales para lograr tu necesidad, por favor, revisa y espera que puedan ayudarte
¿Cómo encender la luz del flash de la cámara mediante programación en Android?
http://www.androidhive.info/2013/04/android-developing-flashlight-application/
http://www.compiletimeerror.com/2013/08/how-to-turn-onoff-camera-led-flashlight.html#.U4WH5Xbc3o4
http://android.programmerguru.com/android-flashlight-example/
Intenta usar esta línea cuando salgas de la aplicación:
System.exit(0);
Acabo de recibir un código de una aplicación Flashlight de algún lado. Estaba usando System.exit(0)
para cerrar la aplicación. Lo eliminé, sabiendo que esta no es una buena práctica. Entonces comencé a recibir estos errores. Probé la solución de la respuesta aceptada, pero luego comencé a recibir algunos otros errores. Entonces, en lugar de resolverlos, System.exit(0)
esta línea System.exit(0)
. Y, comenzó a funcionar bien. Sé que esta no es una buena manera, pero para una pequeña linterna, puedes probar esta solución rápida.
La respuesta simple que puedo encontrar a este problema es que no estaba pidiendo el permiso de la cámara para el usuario, y es por eso que el permiso de cámara predeterminado no estaba disponible para mi aplicación en los dispositivos Marshmallow. Simplemente agregué la verificación de permisos para la cámara antes de encender la cámara y todo funciona bien.
Si todo tu código está bien, deberías verificar si hay alguna otra aplicación usando tu cámara. Luego debe cerrar otra aplicación que actualmente usa su cámara.
También vi este error:
java.lang.RuntimeException: no se puede conectar al servicio de la cámara
mientras experimentas con una aplicación de linterna. Resulta que estaba un poco descuidado con mis permisos y los copié en el cuerpo del bloque de la aplicación en el archivo manifest.xml. Entonces REALMENTE debe obedecer la sintaxis tal como se documenta en:
http://developer.android.com/guide/topics/manifest/manifest-element.html
De lo contrario, la aplicación fallará con la falla de la conexión del servicio en la llamada Camera.open (). Debería verse así basado en sus permisos en la pregunta:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus"/>
<application
¡Asegúrate de que tu permiso y tu lista de funciones estén contenidas solo en la sección de manifiesto y no estén enterradas en la sección de aplicaciones!
Tuve el mismo problema que ninguna de las respuestas aquí resueltas, así que después de resolverlo agrego mi manera de resolverlo. Esto se aplica a las nuevas versiones de Android que admiten la configuración de permisos por aplicación (desde Marshmallow, 6.0). El permiso para la cámara se puede desactivar y se debe habilitar desde la configuración de la aplicación. Configuración -> Aplicaciones -> [Su aplicación] -> Permisos
Más información sobre esto aquí: http://developer.android.com/training/permissions/requesting.html
prueba esto...
static Camera camera = null;
declararlo en la parte superior.
try{
if(clickOn == true) {
clickOn = false;
camera = Camera.open();
Parameters parameters = camera.getParameters();
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
remoteViews.setViewVisibility(R.id.button1, View.GONE);
remoteViews.setViewVisibility(R.id.button2, View.VISIBLE);
localAppWidgetManager.updateAppWidget(componentName, remoteViews);
} else {
clickOn = true;
camera.stopPreview();
camera.release();
camera = null;
remoteViews.setViewVisibility(R.id.button1, View.VISIBLE);
remoteViews.setViewVisibility(R.id.button2, View.GONE);
localAppWidgetManager.updateAppWidget(componentName, remoteViews);
}
} catch(Exception e) {
Log.e("Error", ""+e);
}
si intenta abrir la cámara con un CameraID que no existe, recibirá el mismo error (java.lang.RuntimeException: no se puede conectar al servicio de la cámara)
mira tu código en este bloque
camera.setParameters(parameters);
camera.stopPreview();
camera.release();
camera = null;
release()
llamada release()
para liberar la cámara y utilizarla en otras aplicaciones. Las aplicaciones deben liberar la cámara inmediatamente en onPause()
(y volver a abrirla () en onResume().
En el código anterior, inmediatamente después del lanzamiento está poniendo null en la cámara
stopPreview()
y release()
una vez que regrese de la cámara, para que otra aplicación pueda acceder a él. Convierta la clase "Cámara" en estática y onPause()
como null
en onPause()
. Esto resuelve mi problema.
Pruébalo:
public class CameraPhotoCapture extends Activity{
static Camera mcamera = null;
@Override
protected void onPause() {
// TODO Auto-generated method stub
if (mcamera != null) {
mcamera.stopPreview();
mcamera.release();
mcamera = null;
Log.d(DEBUG_TAG, "releaseCamera -- done");
}
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
if (mcamera != null) {
Camera.open();
Log.d(DEBUG_TAG, "openCamera -- done");
}
super.onResume();
}
}
Si su versión del sistema operativo es versión 6.0 o posterior, intente esto, espero que esto ayude.
public class RequestUserPermission {
private Activity activity;
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA
};
public RequestUserPermission(Activity activity) {
this.activity = activity;
}
public void verifyStoragePermissions() {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don''t have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
}
}
**//CALL FROM YOUR ACTIVITY**
RequestUserPermission requestUserPermission = new RequestUserPermission(this);
requestUserPermission.verifyStoragePermissions();