2012-01-27 19 views
17

Estoy tratando de usar la biblioteca Zxing para desarrollar un escáner de código de barras.Obtención de un error de la cámara en la aplicación de código de barras Zxing

Mi actividad es el 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:

"En este momento, la cámara androide encontró un problema. Es posible que deba reiniciar el dispositivo ".

He seguido algunos blogs.

Log:

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) 
+0

Un blog detallado: http://sforsuresh.in/cordova-sorry-android-camera-encountered-problem/ –

Respuesta

7

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

La única vez que he visto esto suceder 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 método anterior Camera.open() API solo puede devolver una cámara trasera. Entonces estos devuelven null. Y es un error del dispositivo, realmente, ya que realmente necesitan ejecutar Android 2.3 para permitir que las aplicaciones usen una cámara frontal.

+0

Sean: ¿La aplicación BarcodeScanner3.72 es compatible con Android 1.6? –

+0

Sí, admite 1.5 pares. 4.0 requerirá 2.1. –

+0

@SeanOwen en mi caso tengo un Samsung Galaxy S (Android 2.3.6) que tiene una cámara frontal y una cámara trasera y recibo esta advertencia cuando intento usar el escáner de código de barras. ¿Hay alguna forma de evitarlo? Estoy usando la última versión de BarcodeScanner. Lo descargué hace 2 días. Gracias. –

-2

Si está invocando cámara en emulador de Android 2.2 para Android se dará una excepción. Mientras funciona bien en un dispositivo.

+0

Estoy usando el dispositivo galaxy ace. Todavía es el mismo error. – Smitha

15

el permiso de la cámara

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

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

+1

no .. incluso esto no funcionó :-( – Smitha

+0

¿tiene tarjeta SD en su teléfono? ¿Ha probado el mismo código en cualquier otro dispositivo? –

+0

Sí. Tengo una tarjeta SD en mi dispositivo. Probé en la pestaña Galaxy también – Smitha

-2

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

-1

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

0

Es posible que tenga un Administrador de dispositivos que deshabilita el acceso a la cámara. Debería verificar si la aplicación de la cámara Android puede iniciarse o si se queja de un administrador del dispositivo.

0

que tiene el mismo problema fijo con

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

Nota: esto parece ser un número reciente con el sistema operativo (Android V3.0 pre) ya que el código estaba trabajando previamente.

2

Me enfrenté a un problema similar. Al probar en Android M, la cámara requiere permiso de tiempo de ejecución. Agregue esta respuesta solo como referencia para ayudar a cualquier persona que esté atrapada en un escenario similar.

28

Para Android 6+, debido al problema del "permiso", si recibiste el mensaje "Perdón, la cámara encontró un problema. Es posible que tengas que reiniciar el dispositivo", ve a Configuración - Aplicaciones - encuentra "tu nombre de la aplicación "- seleccione Permisos y encienda" Cámara ".

+0

¡Esto me despega, gracias! Pero, ¿qué es "el problema del permiso"? – Deleplace

+2

Las aplicaciones diseñadas para Android 6.0 ahora solicitarán un permiso cuando lo necesiten. Por ejemplo, en lugar de dar acceso a una aplicación a su cámara cuando la instala, se le preguntará la primera vez que la aplicación quiere acceder a su cámara. –

+0

Esto solo es cierto si la aplicación se dirige a Android 6+. –

Cuestiones relacionadas