2011-12-01 5 views
25

estoy tratando de integrar ZXing QR en mi aplicación Android sin necesidad de instalar aplicación de escáner de código de barras, he seguido los pasos como:escáner de código QR ZXing sin necesidad de instalar escáner de código de barras

1) En primer lugar he descargado ZXing.zip archivar y extraerlo

2) abra el proyecto ZXing como un proyecto existente de Android y luego vaya a la carpeta android y abra la carpeta android y también incluya el archivo core.jar en el proyecto ZXing llamado CaptureActivity.

3) He utilizado el proyecto CaptureActivity como una biblioteca en mi proyecto llamado 'QRCodeSample'. (problema en la inclusión de CaptureActivity como una biblioteca)

4) Mi código es el below3:

public class QRCodeSampleActivity extends Activity { 
Button b1; 
static String contents; 

public static final int REQUEST_CODE = 1; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    b1 = (Button) findViewById(R.id.button1); 
    b1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      /*Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
      intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", 
        "QR_CODE_MODE"); 
      startActivityForResult(intent, 0);*/ 
      Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
      intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
      startActivityForResult(intent, 0); 


     } 
    }); 
} 

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (requestCode == 0) { 
     if (resultCode == RESULT_OK) { 
      contents = intent.getStringExtra("SCAN_RESULT"); 
      String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
      Log.i("Barcode Result", contents); 
      Intent i1 = new Intent(QRCodeSampleActivity.this, webclass.class); 
      startActivity(i1); 
      // Handle successful scan 
     } else if (resultCode == RESULT_CANCELED) { 
      // Handle cancel 
      Log.i("Barcode Result","Result canceled"); 
     } 
    } 
} 

} 

El archivo de manifiesto es:

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

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 

    <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="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.DEFAULT"/> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="com.google.zxing.client.android.SCAN"/> 
       <category android:name="android.intent.category.DEFAULT"/> 
      </intent-filter> 


    </activity> 
    <activity 
     android:label="@string/app_name" 
     android:name=".QRCodeSampleActivity" > 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

    </activity> 


    <activity android:name=".webclass"></activity> 

</application> 

</manifest> 

y su biblioteca no añadir también

LibraryInformation

Cuando estoy tratando de ru En mi proyecto, el mensaje de error es:

No se pudo crear una instancia de la actividad ComponentInfo {com.qr.code/com.qr.code}: java.lang.ClassNotFoundException: com.qr.code en el cargador dalvik.system.PathClassLoader [/data/app/com.qr.code-1.apk]

+0

Para incluir ZXing es posible Lo logré. Creo que usas algunas otras clases. No puedo recordar que zxing use el espacio de nombres com.qr.code – rekire

+0

¿Por qué está utilizando el proyecto de la biblioteca? Puede construir la biblioteca zxing descargada en un archivo jar utilizando Ant e incluir ese archivo jar en su proyecto. Aquí está el enlace de las instrucciones http://code.google.com/p/zxing/wiki/GettingStarted – blessenm

+0

¿Estás seguro de que esto también funciona para Android? Hice mi propia lib con algunas extensiones personalizadas. – rekire

Respuesta

23

finalmente conseguí la respuesta,

a partir del ADT 14, los campos de recursos (como R.id.decode) no están constantes más largas cuando se define en proyectos de biblioteca

Por lo tanto, en la biblioteca de ZXing-> android-> com.google.zxing.client.android.CaptureActivityHandler.java y Deco deHandler.java

reemplace ambas de estas clases conmutar las sentencias case con if-else, y luego importar esta biblioteca ZXing en su proyecto ..

resto de la codificación de mi propio proyecto es el mismo ... sólo el problema con las librerías de clases ya que no se actualizará a medida que de acuerdo con ADT 14 ..

Kanika

+21

No integre nuestro código como proyecto de biblioteca. Por favor, escriba su propia aplicación de escáner y reutilice las piezas si lo necesita. No abrimos el código fuente para que clones de esta manera. –

+0

Hice todo como una característica pero todavía tengo esa excepción. ¿Por qué no puedo llegar a esas clases? Lo agregué como lib y también agregué core.jar como jar externo. AndroidRuntime (6316): java.lang.RuntimeException: no se puede instanciar la actividad ComponentInfo {com.sonqr/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassNotFoundException: com.google.zxing.client.android. CaptureActivity –

+0

con respecto a @Kanika – Samer

0
  1. Después de importar ZXing como proyecto existente, Propiedades> Java BuildPath> check "es la biblioteca" (botón de verificación) y luego intente agregar Zxing como biblioteca.

  2. Asegúrese webclass.class existen en su QRcodesampleActivity.java

3

que tenía el mismo problema y después de las horas que luchan con la que finalmente he conseguido resolverlo como este.como Rubiraj está apuntando

* haga clic derecho en su proyecto> Propiedades> Android> (en la biblioteca pestaña) Añadir el proyecto ZXing *

Suponiendo que se haya podido crear correctamente proyecto ZXing como una Biblioteca como se explica aquí: http://damianflannery.wordpress.com/2011/06/13/integrate-zxing-barcode-scanner-into-your-android-app-natively-using-eclipse/

4

que debe seguir el paso dado por el enlace

http://www.androidaz.com/development/zxing-qr-reader-direct-integration

se puede descargar desde core.jar

http://repo1.maven.org/maven2/com/google/zxing/core/2.2/

Lo anterior está trabajando para mí, si el programa sigue siendo sólo hay que poner el núcleo-2.2.jar en librerías y limpiar su proyecto

+0

¿Es esta una solución estándar? Has publicado la misma respuesta a varias preguntas – acutesoftware

+0

+1 Gracias por el enlace, ¡Saludos! –

+0

El primer enlace que proporcionó ya está muerto. – shadox

17

Para todos aquellos usuarios de Android Studio/Gradle que hay chicos

bien, ya que mi tarea hoy wa Para integrar ZXING en una aplicación de Android y no había buenas fuentes de información, le daré una pista de lo que hizo que tuviera éxito: porque resultó ser muy fácil (en la versión 2. *).

Hay un repositorio git realmente práctico que proporciona el proyecto de la biblioteca zxing android como un archivo AAR.

Todo lo que tiene que hacer es añadir esto a su build.gradle

repositories { 
    mavenCentral() 

    maven { 
     url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/" 
    } 
} 

dependencies { 
    compile 'com.google.zxing:core:2.2' 
    compile 'com.embarkmobile:zxing-android-minimal:[email protected]' 
} 

y Gradle hace toda la magia para compilar el código y lo hace accesible en su aplicación .

Para iniciar el escáner después, utilizar esta clase/método:

IntentIntegrator.initiateScan(this); // `this` is the current Activity 

Si ya ha visitado el enlace que va a ver que acabo de copiar & pegado el código de allí el readme git. Si no, vaya allí para obtener más información y ejemplos de código.

Espero ser útil para los lectores en el futuro. Paz :)

+0

Esto me parece que es realmente útil para los códigos de barras. Necesito usar los códigos QR. ¿Me equivoco? – KairisCharm

+0

Funciona para códigos qr también –

+0

Hola, descargué las fuentes del enlace que proporcionó.¿Es posible compilarlo en un archivo jar y luego importarlo a mi proyecto de estudio de Android? En caso afirmativo, ¿puede proporcionar algún enlace/instrucciones sobre cómo construirlo? Estaría muy feliz. Gracias por adelantado. – greenskin

1

Paso a paso para configurar ZXing 3.2.1 en Eclipse

  1. Descargar zxing-master.zip de "https://github.com/zxing/zxing"
  2. Descomprimir zxing-master.zip, utilizar Eclipse para la importación proyecto "android" en ZXing-master
  3. Descargar núcleo-3.2.1.jar de "http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/"
  4. Crear carpeta "libs" en el proyecto "androide" y pegar cor-3.2.1.jar en la carpeta libs
  5. Haga clic en el proyecto: elija "propiedades" -> "Compilador de Java" para cambiar el nivel a 1.7. A continuación, haga clic en "Android" cambie "Objetivo de compilación del proyecto" a Android 4.4.2+, porque el uso de 1.7 requiere la compilación con Android 4.4
  6. Si "CameraConfigurationUtils.java" no existe en "zxing-master/android/app/src/main/java/com/google/zxing/client/android/camera/". Puede copiarlo de "zxing-master/android-core/src/main/java/com/google/zxing/client/android/camera /" y pegarlo en su proyecto.
  7. Limpiar y construir proyecto. Si su proyecto muestra un error sobre "switch - case", debe cambiarlo a "if - else".
  8. Completado. Limpiar y construir proyecto. Puede hacer clic en "parámetros fisico"> "Android"> haga clic en "¿Es Bibliotecas" a utilizar para su proyecto
2

MaterialBarcodeScanner: Fácil de usar lector de código de barras para su proyecto Android (Google utiliza Mobile Vision API).

  1. Proporcionar dependencia Gradle

    compilación 'com.edwardvanraak: MaterialBarcodeScanner: 0.0.6-ALPHA'

  2. Construir una MaterialBarcodeScanner

    private void startScan() { 
        /** 
        * Build a new MaterialBarcodeScanner 
        */ 
        final MaterialBarcodeScanner mBarcodeScanner 
          = new MaterialBarcodeScannerBuilder() 
          .withActivity(MainActivity.this) 
          .withEnableAutoFocus(true) 
          .withBleepEnabled(true) 
          .withBackfacingCamera() 
          .withText("Scanning...") 
          .withResultListener(new MaterialBarcodeScanner.OnResultListener() { 
           @Override 
           public void onResult(Barcode barcode) { 
            barcodeResult = barcode; 
            result.setText(barcode.rawValue); 
           } 
          }) 
          .build(); 
        mBarcodeScanner.startScan(); 
    } 
    
  3. conectarlo a un botón

    fab.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
    startScan(); 
    } 
    }); 
    
  4. ¡Empiece a escanear!

+0

¿Cómo puedo usar esta biblioteca para el escaneo continuo (por ejemplo, sin tener que tocar el botón)? – LRMAAX

Cuestiones relacionadas