Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android con ZXing genera código QR

Tenía un problema al intentar generar código QR en la programación de Android. Aquí está el tutorial que seguí. Cuando mi botón de generar en el clic, estoy llamando a este método:

private void generateQR(){ String qrInputText = "test"; //Find screen size WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); Point point = new Point(); display.getSize(point); int width = point.x; int height = point.y; int smallerDimension = width < height ? width : height; smallerDimension = smallerDimension * 3/4; //Encode with a QR Code image QRCodeEncoder qrCodeEncoder = new QRCodeEncoder( qrInputText, null, Contents.Type.TEXT, BarcodeFormat.QR_CODE.toString(), smallerDimension ); try { Bitmap bitmap = qrCodeEncoder.encodeAsBitmap(); ImageView myImage = (ImageView) findViewById(R.id.ivImage); myImage.setImageBitmap(bitmap); } catch (WriterException e) { e.printStackTrace(); } } 

Y entonces para las clases de QRCodeEncoder y de contenido, seguí el que está en el tutorial. Sin embargo, cuando hago clic en generar, estoy recibiendo el mensaje de error como:

 01-30 16:37:03.093: I/dalvikvm(1069): Could not find method com.google.zxing.BarcodeFormat.valueOf, referenced from method com.example.qrcodescan.QRCodeEncoder.encodeContents 01-30 16:37:03.093: W/dalvikvm(1069): VFY: unable to resolve static method 338: Lcom/google/zxing/BarcodeFormat;.valueOf (Ljava/lang/String;)Lcom/google/zxing/BarcodeFormat; 01-30 16:37:03.093: D/dalvikvm(1069): VFY: replacing opcode 0x71 at 0x0005 01-30 16:37:03.093: W/dalvikvm(1069): VFY: unable to resolve static field 287 (QR_CODE) in Lcom/google/zxing/BarcodeFormat; 01-30 16:37:03.093: D/dalvikvm(1069): VFY: replacing opcode 0x62 at 0x0011 01-30 16:37:03.093: W/dalvikvm(1069): VFY: unable to resolve static field 287 (QR_CODE) in Lcom/google/zxing/BarcodeFormat; 01-30 16:37:03.093: D/dalvikvm(1069): VFY: replacing opcode 0x62 at 0x0015 01-30 16:37:03.093: W/dalvikvm(1069): VFY: unable to resolve static field 294 (CHARACTER_SET) in Lcom/google/zxing/EncodeHintType; 01-30 16:37:03.093: D/dalvikvm(1069): VFY: replacing opcode 0x62 at 0x0018 01-30 16:37:03.093: E/dalvikvm(1069): Could not find class 'com.google.zxing.MultiFormatWriter', referenced from method com.example.qrcodescan.QRCodeEncoder.encodeAsBitmap 01-30 16:37:03.093: W/dalvikvm(1069): VFY: unable to resolve new-instance 150 (Lcom/google/zxing/MultiFormatWriter;) in Lcom/example/qrcodescan/QRCodeEncoder; 01-30 16:37:03.093: D/dalvikvm(1069): VFY: replacing opcode 0x22 at 0x001d 01-30 16:37:03.093: D/dalvikvm(1069): DexOpt: unable to opt direct call 0x0159 at 0x1f in Lcom/example/qrcodescan/QRCodeEncoder;.encodeAsBitmap 01-30 16:37:03.093: D/AndroidRuntime(1069): Shutting down VM 01-30 16:37:03.093: W/dalvikvm(1069): threadid=1: thread exiting with uncaught exception (group=0x40c341f8) 01-30 16:37:03.101: E/AndroidRuntime(1069): FATAL EXCEPTION: main 01-30 16:37:03.101: E/AndroidRuntime(1069): java.lang.NoClassDefFoundError: com.google.zxing.BarcodeFormat 01-30 16:37:03.101: E/AndroidRuntime(1069): at com.example.qrcodescan.MainActivity.generateQR(MainActivity.java:95) 01-30 16:37:03.101: E/AndroidRuntime(1069): at com.example.qrcodescan.MainActivity.access$0(MainActivity.java:77) 01-30 16:37:03.101: E/AndroidRuntime(1069): at com.example.qrcodescan.MainActivity$2.onClick(MainActivity.java:54) 01-30 16:37:03.101: E/AndroidRuntime(1069): at android.view.View.performClick(View.java:3620) 01-30 16:37:03.101: E/AndroidRuntime(1069): at android.view.View$PerformClick.run(View.java:14292) 01-30 16:37:03.101: E/AndroidRuntime(1069): at android.os.Handler.handleCallback(Handler.java:605) 01-30 16:37:03.101: E/AndroidRuntime(1069): at android.os.Handler.dispatchMessage(Handler.java:92) 01-30 16:37:03.101: E/AndroidRuntime(1069): at android.os.Looper.loop(Looper.java:137) 01-30 16:37:03.101: E/AndroidRuntime(1069): at android.app.ActivityThread.main(ActivityThread.java:4512) 01-30 16:37:03.101: E/AndroidRuntime(1069): at java.lang.reflect.Method.invokeNative(Native Method) 01-30 16:37:03.101: E/AndroidRuntime(1069): at java.lang.reflect.Method.invoke(Method.java:511) 01-30 16:37:03.101: E/AndroidRuntime(1069): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982) 01-30 16:37:03.101: E/AndroidRuntime(1069): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749) 01-30 16:37:03.101: E/AndroidRuntime(1069): at dalvik.system.NativeStart.main(Native Method) 

He añadido el core.jar bajo la carpeta libs. ¿Algunas ideas? Gracias por adelantado.

  • EXCEPCIÓN INESPERADA DE SUPERIOR NIVEL: com.android.dex.DexException
  • ¿Cómo integrar ZXing Library a Android Studio para escanear códigos de barras?
  • Cómo usar la biblioteca de ZXing sin instalar la aplicación barcodescanner
  • ZXing cómo escanear código QR y código de barras 1D?
  • Cómo obtener un error de cámara en la aplicación de código de barras de Zxing
  • Zxing onActivityResult no se llama en Fragmento sólo en Actividad
  • Cómo leer varios códigos qr de una imagen usando la biblioteca zxing
  • ¿Cómo importar ZXING a android studio?
  • 3 Solutions collect form web for “Android con ZXing genera código QR”

    Aquí es cómo puede generar una imagen con código QR de una cadena –

    captura de pantalla

    Primero agregue la siguiente línea al archivo build.gradle en su proyecto de Android Studio :

     dependencies { .... compile 'com.google.zxing:core:3.2.1' } 

    O si sigue usando Eclipse con ADT-plugin, agregue core.jar de ZXing desde el repositorio de Maven al subdire de libs de su proyecto Eclipse ADT (aquí en pantalla completa ):

    Eclipse

    Y luego utilizar el código de ejemplo de mi MainActivity.java :

     @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView imageView = (ImageView) findViewById(R.id.qrCode); try { Bitmap bitmap = encodeAsBitmap(STR); imageView.setImageBitmap(bitmap); } catch (WriterException e) { e.printStackTrace(); } } Bitmap encodeAsBitmap(String str) throws WriterException { BitMatrix result; try { result = new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, WIDTH, WIDTH, null); } catch (IllegalArgumentException iae) { // Unsupported format return null; } int w = result.getWidth(); int h = result.getHeight(); int[] pixels = new int[w * h]; for (int y = 0; y < h; y++) { int offset = y * w; for (int x = 0; x < w; x++) { pixels[offset + x] = result.get(x, y) ? BLACK : WHITE; } } Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, w, h); return bitmap; } 
     public static int white = 0xFFFFFFFF; public static int black = 0xFF000000; public final static int WIDTH=500; try { Bitmap bmp = encodeAsBitmap("Life is a bitch"); imgView.setImageBitmap(bmp); } catch (Exception e) { e.printStackTrace(); } Bitmap encodeAsBitmap(String str) throws WriterException { BitMatrix result; Bitmap bitmap=null; try { result = new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, WIDTH, WIDTH, null); int w = result.getWidth(); int h = result.getHeight(); int[] pixels = new int[w * h]; for (int y = 0; y < h; y++) { int offset = y * w; for (int x = 0; x < w; x++) { pixels[offset + x] = result.get(x, y) ? black:white; } } bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, 500, 0, 0, w, h); } catch (Exception iae) { iae.printStackTrace(); return null; } return bitmap; } 

    La biblioteca de ZXing puede proporcionar la manera fácil.

    Origen es: Generar QRCode Android Ejemplo

    agregar en dependencias

     compile 'com.google.zxing:core:3.2.1' 

    Aquí está el método para convertir la cadena en QR Image

     private Bitmap TextToImageEncode(String Value) throws WriterException { BitMatrix bitMatrix; try { bitMatrix = new MultiFormatWriter().encode( Value, BarcodeFormat.DATA_MATRIX.QR_CODE, QRcodeWidth, QRcodeWidth, null ); } catch (IllegalArgumentException Illegalargumentexception) { return null; } int bitMatrixWidth = bitMatrix.getWidth(); int bitMatrixHeight = bitMatrix.getHeight(); int[] pixels = new int[bitMatrixWidth * bitMatrixHeight]; for (int y = 0; y < bitMatrixHeight; y++) { int offset = y * bitMatrixWidth; for (int x = 0; x < bitMatrixWidth; x++) { pixels[offset + x] = bitMatrix.get(x, y) ? getResources().getColor(R.color.black):getResources().getColor(R.color.white); } } Bitmap bitmap = Bitmap.createBitmap(bitMatrixWidth, bitMatrixHeight, Bitmap.Config.ARGB_4444); bitmap.setPixels(pixels, 0, 500, 0, 0, bitMatrixWidth, bitMatrixHeight); return bitmap; } 

    Guardar imagen qr genera

      public String saveImage(Bitmap myBitmap) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); myBitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes); File wallpaperDirectory = new File( Environment.getExternalStorageDirectory() + IMAGE_DIRECTORY); // have the object build the directory structure, if needed. if (!wallpaperDirectory.exists()) { Log.d("dirrrrrr", "" + wallpaperDirectory.mkdirs()); wallpaperDirectory.mkdirs(); } try { File f = new File(wallpaperDirectory, Calendar.getInstance() .getTimeInMillis() + ".jpg"); f.createNewFile(); //give read write permission FileOutputStream fo = new FileOutputStream(f); fo.write(bytes.toByteArray()); MediaScannerConnection.scanFile(this, new String[]{f.getPath()}, new String[]{"image/jpeg"}, null); fo.close(); Log.d("TAG", "File Saved::--->" + f.getAbsolutePath()); return f.getAbsolutePath(); } catch (IOException e1) { e1.printStackTrace(); } return ""; } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.