studio scanner para leer lector hacer for example desde crear con como codigo camara barras android android-camera barcode-scanner zxing

android - scanner - Error de cámara en la aplicación de código de barras Zxing



zxing android example (11)

Estoy tratando de usar la Biblioteca Zxing para desarrollar un escáner de código de barras.

Mi actividad es la siguiente:

public class Scanner extends Activity { private static final String PACKAGE = "com.test.scan"; private static final String SCANNER = "com.google.zxing.client.android.SCAN"; private static final String SCAN_FORMATS = "UPC_A,UPC_E,EAN_8,EAN_13,CODE_39,CODE_93,CODE_128"; private static final String SCAN_MODE = "QR_CODE_MODE"; public static final int REQUEST_CODE = 1; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); Button ok; ok = (Button) findViewById(R.id.b1); ok.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent scanIntent = new Intent(SCANNER); scanIntent.setPackage(PACKAGE); scanIntent.addCategory(Intent.CATEGORY_DEFAULT); scanIntent.putExtra("SCAN_FORMATS", SCAN_FORMATS); scanIntent.putExtra("SCAN_MODE", SCAN_MODE); try { startActivityForResult(scanIntent, REQUEST_CODE); } catch (ActivityNotFoundException e) { // TODO: Exception handling } } }); }

También archivo manifiesto:

<activity android:name=".Scanner" android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.google.zxing.client.android.CaptureActivity" android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="com.google.zxing.client.android.SCAN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.google.zxing.client.android.PreferencesActivity" android:label="@string/preferences_name"> </activity> <activity android:name="com.google.zxing.client.android.HelpActivity" android:screenOrientation="user"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.google.zxing.client.android.share.ShareActivity" android:label="@string/share_name" android:screenOrientation="user" android:theme="@android:style/Theme.Light"> <intent-filter> <action android:name="com.google.zxing.client.android.SHARE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <uses-permission android:name="android.permission.CAMERA"

Pero estoy recibiendo el siguiente error:

"Lo sentimos, la cámara de Android encontró un problema. Es posible que deba reiniciar el dispositivo".

He seguido algunos blogs.

Iniciar sesión:

Unexpected error initializating camera 01-27 10:40:48.281: WARN/CaptureActivity(1007): java.lang.RuntimeException: Fail to connect to camera service 01-27 10:40:48.281: WARN/CaptureActivity(1007): at android.hardware.Camera.native_setup(Native Method) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at android.hardware.Camera.<init>(Camera.java:185) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at android.hardware.Camera.open(Camera.java:165) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at com.google.zxing.client.android.camera.CameraManager.openDriver(CameraManager.java:126) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at com.google.zxing.client.android.CaptureActivity.initCamera(CaptureActivity.java:606) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at com.google.zxing.client.android.CaptureActivity.surfaceCreated(CaptureActivity.java:346) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at android.view.SurfaceView.updateWindow(SurfaceView.java:532) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at android.view.SurfaceView.dispatchDraw(SurfaceView.java:339)


Es posible que tenga un Administrador de dispositivos que deshabilite el acceso a la cámara. Debe comprobar si la aplicación de la cámara de Android puede iniciarse o si se queja de un administrador de dispositivo.


Esto significa que el dispositivo devolvió un null desde Camera.open() y nunca debería hacer eso. Se trata como un error de dispositivo. No estoy seguro de cómo debería depurar por qué está haciendo esto, pero esa es la causa.

La única vez que he visto que esto ocurra consistentemente es en dispositivos con Android 2.2 que solo tienen una cámara frontal. La API para acceder a una cámara frontal solo apareció en Android 2.3, y el Camera.open() anterior de Camera.open() API solo puede devolver una cámara trasera. Así que estos vuelven null . Y es realmente un error de dispositivo, ya que realmente necesitan estar ejecutando Android 2.3 para que las aplicaciones usen una cámara frontal.


Me enfrenté a un problema similar. Mientras se prueba en Android M, la cámara requiere permiso de tiempo de ejecución . Agregando esta respuesta solo como referencia para ayudar a cualquiera que se encuentre atrapado en un escenario similar.


Para Android 6+, debido al problema de los "permisos", si aparece el mensaje "Lo siento, la cámara encontró un problema. Es posible que deba reiniciar el dispositivo". Vaya a Configuración - Aplicaciones - busque "nombre de la aplicación" - Seleccione Permisos y encienda "Cámara".


Pude resolver el problema simplemente colocando los permisos de la cámara en la aplicación principal.


Resolví el problema en Android 8.1.0 con la solicitud de permisos para la aplicación a través del código.

La razón de esto es (creo) debido a las políticas modificadas en el manejo del acceso a dispositivos en las versiones más recientes de Android que tiene que solicitar permisos en su código. No es suficiente poner los permisos necesarios en su XML. El usuario debe tener la opción de denegar el acceso mientras utiliza la aplicación.

Para activar el "give-permission-popup" puede usar lo siguiente, por ejemplo, dentro de onCreate de su MainActivity:

if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED) { ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.CAMERA}, MY_CAMERA_REQUEST_CODE); }

Debería tener el mismo efecto que activar el permiso a través de la configuración. Pero en una aplicación real, solicitar permisos dentro de la aplicación es probablemente más fácil de usar.


Revisa tu código, creo que tu código intenta abrir la cámara varias veces. Descargue el código fuente del escáner de código de barras google zxing y luego pruébelo.


Si está invocando una cámara en el emulador de Android para Android 2.2, esto le dará una excepción. Si bien funciona bien en un dispositivo.


Solo agrega el permiso de la cámara con Toast:

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { // Permission is already available, start camera preview Toast.makeText(this,"camera permission granted",Toast.LENGTH_LONG).show(); } else { // Permission is missing and must be requested. requestCameraPermission(); }

y:

private void requestCameraPermission() { // Permission has not been granted and must be requested. if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { // Provide an additional rationale to the user if the permission was not granted // and the user would benefit from additional context for the use of the permission. // Display a SnackBar with cda button to request the missing permission. Toast.makeText(this, "Camera access is required to Scan The Barcode.", Toast.LENGTH_LONG).show(); // Request the permission ActivityCompat.requestPermissions(CaptureActivity.this, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CAMERA); } else { Toast.makeText(this, "<b>Camera could not be opened.</b>//nThis occurs when the camera is not available (for example it is already in use) or if the system has denied access (for example when camera access has been disabled).", Toast.LENGTH_SHORT).show(); // Request the permission. The result will be received in onRequestPermissionResult(). ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CAMERA); } }


Tengo el mismo problema lo solucioné con

SurfaceHolder surfaceHolder = surfaceView.getHolder(); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

Nota: este parece ser un problema reciente con el sistema operativo (Android V3.0 anterior), ya que el código funcionaba anteriormente.


permiso de camara

<uses-permission android:name="android.permission.CAMERA"

no está en el lugar adecuado. debe ser después de la etiqueta de la aplicación.