Error de la cámara "No se puede conectar a la cámara" o en algunos teléfonos aparece el error "La cámara está usando otra aplicación"

He implementado para grabar audio en segundo plano usando Android MediaRecorder si la grabación de audio está en curso y el usuario abierto es la cámara nativa para grabar vídeo, que da

Error de la cámara "No se puede conectar a la cámara"

O en algunos teléfonos, el error aparece como

Su cámara está en uso por otra aplicación

Introduzca aquí la descripción de la imagen

Si dejo mediarecorder entonces la grabación video nativa de la cámara trabaja muy bien, busqué eventos para saber cuándo la cámara va a comenzar el vídeo entonces entonces en mi app paro el mediarecorder, encontré el BroadcastReceiver con los filtros

<receiver android:name=".receiver.CameraReceiver"> <intent-filter android:priority="10000"> <action android:name="android.Medintent.action.CAMERA_BUTTON" /> <action android:name="android.hardware.action.NEW_PICTURE" /> <action android:name="android.hardware.action.NEW_VIDEO" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> <data android:mimeType="video/*" /> </intent-filter> </receiver> 

Los eventos NEW_VIDEO y NEW_PICTURE se activan cuando se capturan y se guardan imágenes o vídeos en el directorio. ¿Alguien sabe cómo resolver este problema? Quiero saber en mi aplicación el evento cuando Native / Camera Apps va a grabar video. Gracias por adelantado

Incluso tuve el mismo problema. Una vez que el recurso de la cámara está siendo utilizado por una aplicación, hasta que se libera, puede utilizarlos en alguna otra aplicación o incluso un servicio. Si cualquier servicio está utilizando el recurso de la cámara, hasta que se libere lo mismo, no podemos usar el hardware de la cámara. Puede duplicar si el hardware de la cámara se está utilizando utilizando este código: –

  private boolean isCameraInUse() { Log.v(TAG, "isCameraInUse()"); boolean isCameraInUse = false; if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)//Use Camera Api for Version Code < 23 and mCamera manager above it. { String cameraId = null; CameraManager camManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); // Usually front mCamera is at 0 position. try { cameraId = camManager.getCameraIdList()[0]; } catch (CameraAccessException e) { Log.e(TAG, Log.getStackTraceString(e)); isCameraInUse = true; } try { camManager.setTorchMode(cameraId, true); camManager.setTorchMode(cameraId, false); } catch (CameraAccessException e) { Log.e(TAG, Log.getStackTraceString(e)); isCameraInUse = true; } } else { Camera c = null; try { c = Camera.open(); } catch (RuntimeException e) { Log.e(TAG, Log.getStackTraceString(e)); turnFlashOff(mContext); isCameraInUse = true; } finally { if (c != null) c.release(); } } return isCameraInUse; } 

CameraManager.AvailabilityCallback proporciona un onCameraAvailable(String cameraId) para detectar si la cámara está disponible o no? https://developer.android.com/reference/android/hardware/camera2/CameraManager.AvailabilityCallback.html

Obtener todos los id de cámara es el mismo que el de arriba, como se muestra en @GAGAN.

 CameraManager camManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); // Usually front mCamera is at 0 position. try { cameraId = camManager.getCameraIdList()[0]; } catch (CameraAccessException e) { Log.e(TAG, Log.getStackTraceString(e)); Log.cat("Error: ", e.getReason()+""); if(e.CAMERA_DISABLED) {//ENABLE CAMERA } else if( ... you can go to the below link to do various logic) .... else { //don nothing} } 

https://developer.android.com/reference/android/hardware/camera2/CameraAccessException.html#CAMERA_IN_USE

Nota: Hasta que otras aplicaciones utilicen el hardware de la cámara, están utilizando de forma intencionada. Así que hasta que estas aplicaciones no liberen su hardware, no puede usarlo, está claro. No puedes saber si estas aplicaciones realmente necesitan la cámara. Creemos que el proceso reserva el hardware cuando lo necesita.

Pero, podemos configurar el oyente en cuando la cámara se vuelve disponible (gratis) para que pueda utilizar de inmediato.

  CameraManager.AvailabilityCallback availabilityCallback = new CameraManager.AvailabilityCallback() { @Override public void onCameraAvailable(String cameraId) { // your further stuffs. You must put all of your camera related logic here. } public void onCameraUnavailable(String cameraId) { //you can logcat camera not available } }; 

El uso de CameraManager.AvailabilityCallback clase abstracta es cuando se crea una instancia de objeto, se realiza una instanciación anónima que implementa callbacks como onCameraAvailabe() , que en realidad es un listener que está recibiendo de Camera Observer .

Respuesta: Si hubieras puesto los comandos de procesamiento de la cámara en la devolución de llamada onCameraAvailable() , te garantizo que no tendrías el error que demostraste.

Si la cámara es utilizada por otras aplicaciones en segundo plano, significa que esas otras aplicaciones son una especie de buggy, porque la cámara necesita una vista preliminar; No están liberando la cámara incluso después de que se hagan con ella. Nadie usa la cámara en el fondo. Incluso en este caso también, se supone que no se debe matar el proceso de la cámara con fuerza, porque puede ocurrir la memoria de fugas. Porque usted no sabe cómo otros procesos están utilizando la cámara.

  • Servicio de grabación / procesamiento de llamadas! - Android
  • Cómo grabar vídeo en Android en Stream
  • Silencio de MediaRecorder al inicio de la grabación (¿Retardo?)
  • Frecuencia de muestreo y ruido de Android MediaRecorder
  • Android MediaRecorder setCaptureRate () y velocidad de reproducción de vídeo
  • Grabar toda la pantalla, incluida la vista previa de la cámara frontal
  • ¿Cómo usar setCamera (MediaRecorder)?
  • Android MediaRecorder se bloquea
  • Dividir y combinar / grabar audio grabado
  • ¿Cuándo debo volver a bloquear la cámara?
  • MediaRecorder Audio Delay
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.