Integrar el escáner de código QR ZXING sin instalar el escáner de código de barras
-
26-10-2019 - |
Pregunta
Estoy tratando de integrar el código QR ZXing en mi aplicación Android sin instalar la aplicación de escáner de código de barras, he seguido los pasos como:
1) En primer lugar, he descargado el archivo zxing.zip y los extraí
2) Abra el proyecto ZXing como un proyecto existente en Android y luego vaya a la carpeta de 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 de captureactivity como una biblioteca en mi proyecto llamado 'QRCodesample'. (Problema al incluir la cautureactividad como biblioteca)
4) Mi código es el siguiente 3:
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 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 no está agregando biblioteca tambien
Cuando intento ejecutar mi proyecto, el mensaje de error es:
No se puede instanciar la actividad ComponentInfo {com.qr.code/com.qr.code}: java.lang.classnotfoundexception: com.qr.code en cargador dalvik.system.pathclassloader [/data/app/com.qr.code-1 .APK
Solución
Finalmente obtuve la respuesta,
A partir de ADT 14, los campos de recursos (como R.ID.Decode) ya no son constantes cuando se definen en proyectos de biblioteca
Entonces, en la biblioteca ZXing-> android-> com.google.zxing.client.android.captureactivityhandler.java y decodehandler.java
Reemplace estas dos clases Switch Declares de casos con IF-Else, y luego importe esta biblioteca ZXing en su proyecto.
El resto de la codificación de mi propio proyecto es el mismo ... solo el problema con las clases de la biblioteca, ya que no se actualizan según ADT 14 ..
Kanika
Otros consejos
Para todos esos usuarios de Android Studio/Gradle
Bien chicos, como mi tarea hoy era integrar ZXing en una aplicación de Android y no había buenas fuentes para la entrada por todas partes, le daré una pista de lo que hizo que mi éxito, porque resultó ser muy fácil (en la versión 2.*).
Hay un repositorio de GIT realmente práctico que proporciona el proyecto de la biblioteca de Android ZXing como un archivo AAR.
Todo lo que tienes que hacer es agregar esto a tu compilación.
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:1.2.1@aar'
}
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, use esta clase/método:
IntentIntegrator.initiateScan(this); // `this` is the current Activity
Si ya visitó el enlace, verá que solo copiaré y pegé el código desde allí el readme de Git. ¡Si no vaya allí para obtener más información y ejemplos de código!
Espero ser útil para futuros lectores. Paz :)
Debe seguir el paso según el enlace
http://www.androidaz.com/development/zxing-qr-reader-direct-integration
puedes descargar core.jar desde
http://repo1.maven.org/maven2/com/google/zxing/core/2.2/
Lo anterior está funcionando para mí, si su programa todavía solo pone el núcleo-2.2.Jar en libs y limpia su proyecto
Tuve el mismo problema y después de horas luchando con él finalmente logré resolverlo así. Como Rubiraj está señalando
*Haga clic derecho en su proyecto> Propiedades> Android> (en la biblioteca de pestañas) Agregue el proyecto ZXing *
Suponiendo que pudiera crear correctamente el proyecto ZXing como una biblioteca como se explica aquí:http://damianflannery.wordpress.com/2011/06/13/ingrate-zxing-barcode-scanner-into-your-android-appnatent-seing-eclipse/
MaterialBarcodescanner: Lector de códigos de barras fácil de usar para su proyecto Android (utiliza la API de visión móvil de Google).
Proporcionar dependencia de graduación
compilar 'com.edwardvanraak: material Barcodescanner: 0.0.6-alfa'
Construir un Barcodescanner de material
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(); }
Conéctelo a un botón
fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startScan(); } });
¡Empiece a escanear!
Paso a paso para configurar Zxing 3.2.1 en Eclipse
- Descargar zxing-Master.zip desde "https://github.com/zxing/zxing"
- Unzip Zxing-Master.zip, use Eclipse para importar el proyecto "Android" en ZXing-Master
- Descargue Core-3.2.1.jar desde "http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/"
- Cree la carpeta "LIBS" en el proyecto "Android" y pegue COR-3.2.1.Jar en la carpeta Libs
- Haga clic en el proyecto: elija "Propiedades" -> "Compilador Java" para cambiar el nivel a 1.7. Luego haga clic en el objetivo de compilación del proyecto "Android" Cambiar "a Android 4.4.2+, porque el uso de 1.7 requiere compilar con Android 4.4
- 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 pegar a su proyecto.
- Proyecto de limpieza y construcción. Si su proyecto muestra un error sobre "Switch - Case", debe cambiarlos a "si - else".
- Terminado. Proyecto de limpieza y construcción. Puede hacer clic en "Proprties"> "Android"> Haga clic en "IS Bibliotecas" para usar para su proyecto
Después de importar ZXing como proyecto existente, Propiedades> Java BuildPath> Compruebe "IS Biblioteca" (botón de verificación) e intente agregar ZXing como biblioteca.
Cerciorarse
webclass.class
existir en tuQRcodesampleActivity.java