Cómo obtener un error de cámara en la aplicación de código de barras de Zxing

Estoy intentando utilizar la biblioteca de Zxing para desarrollar un explorador del 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 de 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 consiguiendo el error siguiente:

"Lo siento, la cámara Android se ha encontrado con un problema. Puede que tenga que reiniciar el dispositivo".

He seguido pocos 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) 

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

La única vez que he visto que esto suceda de manera consistente es en dispositivos Android 2.2 que sólo tienen una cámara frontal. La API para acceder a una cámara frontal sólo apareció en Android 2.3, y el Camera.open() anterior Camera.open() API sólo puede devolver una cámara orientada hacia atrás. Así que estos devuelven null . Y es un error de dispositivo, en realidad, ya que realmente necesitan estar ejecutando Android 2.3 para permitir que las aplicaciones usen una cámara frontal.

Para Android 6+, debido al problema de "permiso", si recibió el mensaje "Lo siento, la cámara se encontró con un problema. Puede que tenga que reiniciar el dispositivo.", Vaya a Configuración – Aplicaciones – busque "el nombre de su aplicación" Seleccione Permisos y encienda "Cámara".

Permiso de la cámara

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

No está en el lugar apropiado. Debe ser después de etiqueta de aplicación.

Me enfrenté a un problema similar. Durante la prueba en Android M, la cámara requiere permiso de tiempo de ejecución . Añadir esta respuesta sólo como referencia para ayudar a cualquiera que esté atrapado en un escenario similar.

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 Android puede iniciar o si se queja de un administrador del dispositivo.

Tengo el mismo problema Lo arreglé con

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

Nota: esto parece ser un problema reciente con el sistema operativo (pre V3.0 Android) como el código estaba trabajando anteriormente.

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

Si usted está invocando la cámara en el emulador androide para Android 2.2 que dará la excepción. Mientras funciona bien en un dispositivo.

Echa un vistazo a su código, creo que su código tratando de abrir la cámara varias veces. Descargue el código fuente del escáner de código de barras google zxing y luego inténtelo.

Es útil https://github.com/zxing/zxing/wiki/Scanning-Via-Intent (formalmente alojado en Google Code, ahora en GitHub)

  • Integración de la biblioteca de ZXing directamente en mi aplicación de Android
  • ¿Cómo integrar ZXing api con cámara frontal en android?
  • Biblioteca de escáner de código de barras para android que no sea zxing
  • ¿Cómo abrir la pantalla de escaneo "zxing Barcode" en una pequeña ventana?
  • Mi sentencia java if no parece estar funcionando
  • Zxing onActivityResult no se llama en Fragmento sólo en Actividad
  • Escáner QR con ZXing y ZBar no lee códigos de baja calidad en las tarjetas
  • Vista de cámara personalizada y rotación en Zxing para el código QR?
  • Orientación de Android zxing: ResultMetaData es null, Get Rotation / Orientation
  • Cómo utilizar el resultado del escaneo ZXING
  • Escáner de código QR
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.