Incorpora la libreria Zxing senza utilizzare l'app scanner di codici a barre [duplicato
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).
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:
Innanzitutto, ho creato un AVD (emulator) versione 4 nel mio IDE Eclipse con le funzionalità SDCard e fotocamera accese.
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.
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.
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
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); } }
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ì)
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>
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>
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>
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" />
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.
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
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
- 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
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.
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.
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.