Incorpora la libreria Zxing senza utilizzare l'app scanner di codici a barre [duplicato

StackOverflow https://stackoverflow.com/questions/4854442

  •  27-10-2019
  •  | 
  •  

Domanda

Questa domanda ha già una risposta qui:

Qual è il modo preferito per incorporare la libreria ZXing per fornire la scansione senza installare l'app scanner a barre? Sto cercando di incorporarlo in Android senza dover richiedere all'utente alcuna installazione extra. (Simile al modo in cui funziona l'iPhone SRC).

È stato utile?

Soluzione

È davvero più facile integrare solo tramite Intenzione. Più affidabile e ottieni aggiornamenti automaticamente. Anche se non lo consiglio ...

Il codice sorgente completo è disponibile da Zxing progetto. Vuoi costruire core.jar da core/ E mettilo nel tuo Android lib/ cartella per includere il decodificatore principale nella tua app. Non vuoi includere javase. Puoi guardare al codice in android/ Dato che è la fonte dello scanner di codici a barre, ma come autori ti consigliamo non solo copiarlo e incollare.

è Apache autorizzato Ciò significa che puoi usarlo liberamente, purché tu fornisca essenzialmente l'accesso all'utente ai termini della licenza.

Altri suggerimenti

Android QR/CODE a barre/decodificatore multiforme.

Ho fatto un'applicazione Android utilizzando le API ZXing e ho incorporato solo il codice di decodifica nella mia applicazione. L'input a questo decodificatore è stato dato attraverso la scheda SD dell'emulatore Android.

Ecco i passaggi:

  1. Innanzitutto, ho creato un AVD (emulator) versione 4 nel mio IDE Eclipse con le funzionalità SDCard e fotocamera accese.

  2. Successivamente, ho creato una SDCARD usando i comandi seguenti nel prompt dei comandi:

    c:\>mksdcard 40M mysdcard.iso
    

dove 40 m hanno le dimensioni della scheda SD che ho creato ... questo verrà salvato nel drive C:. Nota, la parte .iso è importante.

  1. Successivamente, dobbiamo montare la scheda SD nell'emulatore usando i comandi sottostanti nel prompt dei comandi:

     c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
    

Qui myavd4 è il nome dell'emulatore/dispositivo virtuale Android che ho creato nel passaggio 1. Anche il segno "@" prima del nome AVD è importante.

Mantieni l'emulatore in esecuzione continuamente ... se viene chiuso, dobbiamo rifare i 3 passaggi sopra.

  1. Possiamo spingere il codice QR o altre immagini del codice che abbiamo su questa scheda SD montata sul nostro emulatore utilizzando i comandi seguenti nel prompt dei comandi:

    c:\>adb push "c:\myqrcode.png" /sdcard
    
  2. Successivamente, nell'IDE Eclipse, avvia un nuovo progetto Android. Il codice seguente deve essere incollato nel file QRDECODER.JAVA del nostro progetto.

    package com.example.palani;
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.TextView;
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.BinaryBitmap;
    import com.google.zxing.ChecksumException;
    import com.google.zxing.FormatException;
    import com.google.zxing.LuminanceSource;
    import com.google.zxing.MultiFormatReader;
    import com.google.zxing.NotFoundException;
    import com.google.zxing.Reader;
    import com.google.zxing.Result;
    import com.google.zxing.ResultPoint;
    import com.google.zxing.client.androidtest.RGBLuminanceSource;
    import com.google.zxing.common.HybridBinarizer;
    public class QRDecoder extends Activity implements OnClickListener {
        public static class Global
        {
            public static String text=null;
        }
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Bitmap bMap = BitmapFactory.decodeFile("/sdcard/myqrcode.png");
            TextView textv = (TextView) findViewById(R.id.mytext);
            View webbutton=findViewById(R.id.webbutton);
            LuminanceSource source = new RGBLuminanceSource(bMap); 
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
            Reader reader = new MultiFormatReader();
            try {
                 Result result = reader.decode(bitmap);
                 Global.text = result.getText(); 
                    byte[] rawBytes = result.getRawBytes(); 
                    BarcodeFormat format = result.getBarcodeFormat(); 
                    ResultPoint[] points = result.getResultPoints();
                    textv.setText(Global.text);
                    webbutton.setOnClickListener(this);
            } catch (NotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ChecksumException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (FormatException e) {
                // TODO Auto-generated catch block
        e.printStackTrace();
    
    
            }   
        }
    
        @Override
        public void onClick(View v) {
            Uri uri = Uri.parse(Global.text); 
            Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
            startActivity(intent);
    
        }
    
    }
    
  3. Successivamente ho scaricato il codice sorgente Zxing (Zxing-1.6.Zip) dal link seguente.

    http://code.google.com/p/zxing/downloads/list
    

Quindi, estrai questo e naviga su D: zxing-1.6 core src com

Copia la cartella COM e incollala nel nostro pacchetto in Eclipse.

(Nota, fai clic con il pulsante destro del mouse sul pacchetto del nostro progetto e incolla ... Se chiede di sostituire la cartella esistente, selezionare Sì)

  1. Quindi, copia e incolla il codice seguente nel file res/layout/main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="20dip"
        >
    
    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    
    android:textColor="@color/mbackground1"
    android:gravity="center_horizontal"
    android:text="@string/decode_label"
    android:padding="20dip" 
    />
    
    <TextView
    android:id="@+id/mytext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:background="@color/mbackground2" 
    android:textColor="@color/mytextcolor" 
    android:padding="20dip"
    />
    
    
     <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/continue_label"
    android:gravity="center_horizontal"
    android:textColor="@color/mytextcolor"
    android:padding="20dip"
    />
    
    <Button 
    android:id="@+id/webbutton"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/web_button"
    android:textColor="@color/mytextcolor"
    />
    
    </LinearLayout>
    
  2. Quindi, copia e incolla il codice seguente nel file Res/Values/Strings.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello World, QRDecoder!</string>
        <string name="app_name">QRDecoder</string>
        <string name="continue_label">Click below to load the URL!!</string>
        <string name="web_button">Load the URL!!</string>
        <string name="decode_label">Decoded URL</string>
    
    </resources>
    
  3. Quindi, copiare e incollare il codice seguente nel file Res/Values/Color.xml, se non esiste, crearne uno.

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <color name="mbackground1">#7cfc00</color>
    <color name="mbackground2">#ffff00</color>
    <color name="mytextcolor">#d2691e</color>
    </resources>
    
  4. Quindi, copia e incolla il codice seguente nel file manifest dopo il tag di apertura

    <manifest>
    
    
    <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />      
    
  5. Quindi, questi passaggi sopra ... la nostra applicazione è pronta. Ora, puoi eseguire l'applicazione e ti darà il risultato decodificato dell'immagine di input che abbiamo dato.

  6. Per modificare l'ingresso, spingere un altro file su scheda SD utilizzando il comando sotto nel prompt dei comandi

    c:\>adb push "c:\image2.png" /sdcard
    

e cambia l'input nel nostro qrdecoder.java per riflettere lo stesso

    Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png");

Gli ingressi possono essere qualsiasi formato come QRCode, CODE, ecc. I tipi di immagine possono essere BMP, JPG o PNG.

Ho usato il sito Web di seguito per generare i codici QR a scopo di test

http://barcode.tec-it.com/

E http://qrcode.kaywa.com

Grazie e vorrei menzionare il punto che sono solo un principiante nello sviluppo di applicazioni Android e mobile e scusa per eventuali errori che avrei potuto fare ...

Se segue la risposta di Palani e vuoi solo importare Core Zxing. Ecco come puoi usare Rgbluminanceurce senza importare zxing.androidtest.

// import com.google.zxing.client.androidtest.RGBLuminanceSource;
import com.google.zxing.RGBLuminanceSource;

// Bitmap mBitmap; // some bitmap...

int width = mBitmap.getWidth();
int height = mBitmap.getHeight();
int[] pixels = new int[width * height];
mBitmap.getPixels(pixels, 0, width, 0, 0, width, height);

RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);

BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));

try {
   Result result = zxingReader.decode(binaryBitmap);
} catch (Exception e) {
   e.printStackTrace();
}

Adesso puoi usare il API di codice a barre ufficiale di Google:

L'API a barre rileva i codici a barre in tempo reale, sul dispositivo, in qualsiasi orientamento. Può anche rilevare più codici a barre contemporaneamente.

Legge i seguenti formati di codice a barre:

  • 1D codici a barre: EAN-13, EAN-8, UPC-A, UPC-E, CODE-39, CODE-93, CODE-128, ITF, CODABAR
  • Capo posti a barre 2D: codice QR, matrice dati, PDF-417, AZTEC

Analizza automaticamente i codici QR, la matrice di dati, i valori PDF-417 e AzTec, per i seguenti formati supportati:

  • URL
  • Informazioni di contatto (VCARD, ecc.)
  • Evento del calendario
  • E-mail
  • Telefono
  • sms
  • Isbn
  • Wifi
  • Geo-locazione (latitudine e longitudine)
  • Patente/ID Aamva Driver

Io stesso ho provato questo metodo, soprattutto, sembrava funzionare.

Anche se ho alcuni punti da fare

  1. Si lamenterà del pacchetto com.google.zxing.client.androidtest necessario per la classe rgbluminanceurce trovata nel pacchetto e utilizzato nell'attività QRDecoder. Così importare anche il pacchetto Zxing/Androidtest.

  2. Se stai aggiungendo la libreria Zxing al di fuori del pacchetto, dovrai modificare tutti i riferimenti R.Java in quanto non troverà il file R.Java nel suo pacchetto.

Per esempio:

Invece di

mRunBenchmarkButton = (Button) findViewById(R.id.benchmark_run);

Nel file BenchMarkActivity.java

mRunBenchmarkButton = (Button) findViewById(yourpackage.R.id.benchmark_run);

Possiamo anche utilizzare l'interfaccia DDMS di Eclipse per spingere il QRCode alla SDCARD del dispositivo.

Usando DDMS

https://github.com/dm77/barcodescanner

Ho preferito questo Lib su Google Play Services perché, come al solito, Google Play Services richiede la stessa versione installata sul dispositivo.

Incorpora Zxing con il nuovo sistema di build e fornisce un AAR. Veramente cool.

Ho provato a incorporare Zxing (Xzing) Per un po ', fino a quando non ho scoperto Zbar. Hanno un modo più semplice di incorporare, meno codice ed esempi facili.

http://sourceforge.net/projects/zbar/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top