W / CameraBase: Se ha producido un error al conectar a la cámara: 0 en camera.open () call
Estoy escribiendo una aplicación de cámara y cada vez que llamo camera.open () la aplicación se bloquea y, a continuación, obtengo este error:
W/CameraBase﹕ An error occurred while connecting to camera: 0
- Imagen tomada de cámara o galería cuando se utiliza en imageview su orientación se cambia, ya veces verticalmente se extiende en Android
- ¿Cómo resolver el error ANR al invocar la cámara?
- ¿Cómo integrar ZXing api con cámara frontal en android?
- Error de la cámara 1001
- SurfaceView for Camera Preview no se destruye cuando se pulsa el botón de encendido
Aquí es cómo estoy abriendo la cámara:
public void getCameraInstance(){ mCamera = null; try { mCamera = Camera.open(); // attempt to get a Camera instance } catch (Exception e) { // Camera is not available (in use or does not exist) } }
ACTUALIZAR:
Si está leyendo esto, tenga en cuenta que esto es para la API original de la cámara y ya no aplica la última versión de la cámara api (cámara2).
Debe utilizar la cámara 2 api desde este punto en adelante, ya que tiene una mayor funcionalidad y también tiene una mejor procesamiento de imagen de tuberías.
NOTA ÚNICAMENTE VÁLIDA HASTA excluir la API 21 (Lolipop), es decir, no se aplica para Lolipop y superiores.
- SetVideoSize () se bloquea con altas resoluciones
- Tome la foto de la cámara en fragmento
- Registro de video Android sin audio
- Media Recorder start falló en android para cámara
- Etiquetado de fotos para Android
- 'Pausa' actividad mientras espera PictureCallback para que se produzca
- Android "Permiso de negación: no se puede utilizar la cámara"
- ¿Se puede utilizar un android.hardware.camera2.CaptureRequest con OpenCV?
Para utilizar el siguiente método
android.hardware.Camera.open(int cameraId)
Debe pasar cameraId, Si desea que la cámara frontal Id que puede utilizar el siguiente método
private int findFrontFacingCamera() { // Search for the front facing camera int numberOfCameras = Camera.getNumberOfCameras(); for (int i = 0; i < numberOfCameras; i++) { CameraInfo info = new CameraInfo(); Camera.getCameraInfo(i, info); if (info.facing == CameraInfo.CAMERA_FACING_FRONT) { cameraId = i; cameraFront = true; break; } } return cameraId; }
-
Si la misma cámara es abierta por otras aplicaciones, lanzará una RuntimeException.
-
Debe llamar a release () cuando haya terminado de usar la cámara, de lo contrario permanecerá bloqueado y no estará disponible para otras aplicaciones.
-
Su aplicación sólo debe tener un objeto Cámara activo a la vez para una cámara de hardware en particular.
En Android 6, asegúrese de solicitar permiso para la cámara. El acceso a la cámara se considera uno de los "permisos peligrosos" .
Manualy ha subido su aplicación al teléfono. Por eso no se aprueba el permiso de la cámara. Tienes que abrir la configuración-> aplicaciones (o algo así) y manualmente aprobar este permiso.
Asegúrese de que su aplicación tenga permiso para la cámara, por ejemplo
<uses-permission android:name="android.permission.CAMERA"/>
En AndroidManifest.xml
Tengo la respuesta para esto: esto es para el problema de permiso marshmallow: añadir esto en su proyecto:
paso 1:
private static final int REQUEST_GET_ACCOUNT = 112; private static final int PERMISSION_REQUEST_CODE = 200;
paso 2:
int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion >= android.os.Build.VERSION_CODES.M) { if (checkPermission()) { Toast.makeText(getApplicationContext(), "Permission already granted", Toast.LENGTH_LONG).show(); } else { requestPermission(); } }
paso 3:
private boolean checkPermission() { int result = ContextCompat.checkSelfPermission(getApplicationContext(), GET_ACCOUNTS); int result1 = ContextCompat.checkSelfPermission(getApplicationContext(), CAMERA); return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED; } private void requestPermission() { ActivityCompat.requestPermissions(this, new String[]{GET_ACCOUNTS, CAMERA}, REQUEST_GET_ACCOUNT); ActivityCompat.requestPermissions(this, new String[]{WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE); } public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case PERMISSION_REQUEST_CODE: if (grantResults.length > 0) { boolean locationAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED; boolean cameraAccepted = grantResults[1] == PackageManager.PERMISSION_GRANTED; if (locationAccepted && cameraAccepted) Toast.makeText(getApplicationContext(), "Permission Granted, Now you can access location data and camera", Toast.LENGTH_LONG).show(); else { Toast.makeText(getApplicationContext(), "Permission Denied, You cannot access location data and camera", Toast.LENGTH_LONG).show(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (shouldShowRequestPermissionRationale(WRITE_EXTERNAL_STORAGE)) { showMessageOKCancel("You need to allow access to both the permissions", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(new String[]{WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE); } } }); return; } } } } break; } } private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) { new android.support.v7.app.AlertDialog.Builder(CaptureActivity.this) .setMessage(message) .setPositiveButton("OK", okListener) .setNegativeButton("Cancel", null) .create() .show(); }
En mi caso, su código de trabajo, después de añadir esto en AndroidManifest.xml
<uses-feature android:name="android.hardware.camera" /> <uses-permission android:name="android.permission.CAMERA"/>
- ¿Hay una manera de saber en tiempo de ejecución qué nivel de API está ejecutando un dispositivo Android?
- Cómo deshabilitar el elemento de lista particular en la lista de vista en android?