Visualizzazione stampabile
-
lettore barcode
Ciao a tutti,
devo realizzare al fly un applicazione tipo la standrad lettore barcode. Il risultato deve essere che leggendo il codice a barre, mi apra in automaitoc un URL con alla fine il parametro letto.
Vorrei realizzarla io (per un discorso di customizzazione) anche se potrei usare quella già presente. Qaulcuno è in grado di darmi un dritta?Pezzi di codice?Ecc?
Grazie!
-
mai lavorato con i barcode su android, ma ho sentito parlare da più parti di questa libreria: zxing - Multi-format 1D/2D barcode image processing library with clients for Android, Java - Google Project Hosting Se può esserti utile
-
Grazie pourquoipas, adesso sto scaricando l SDK che pensavo di aver già installato, si evde che l ho tolta.
Poi vedo. Dovrebbe essere un componente base, il barcode. Magari scrivendo del codice, riesco a mettere la mia icona e togliere opzioni inutili. Programmi?
-
Sia programmazione che analisi, Java ma su application server, android è un passatempo per il poco tempo libero :)
-
pourquoipas sto leggendo una guida, ho già provato qualcosa con bottoni e textview ma vado avanti così e finisco tra trent anni.
Sto inziando a capire i passaggi dichiarazione degli "stili", importazione del widget, dichirazione oggetto e utilizzo nelle funzioni (? passaggio un po meno chiaro) ma le robette che ho fatto funzionano.
Ma per aprire la app direttamente sul barcode, analizzare il codice a barre, e inviarlo ad un url predefinito, mi è ancora sfuocato del tutto. Nà dritta? :)
-
Lui dice:
Per codificare una stringa in un codice QR semplicemente creare un Intent con l'azione Decode specificato, due extra stringa che specifica il tipo e dati e startActivity call ():
codice:
Intent intent = new Intent("com.google.zxing.client.android.ENCODE");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("ENCODE_TYPE", "TEXT_TYPE");
intent.putExtra("ENCODE_DATA","HELLO WORLD");
startActivity(intent)
Ma come faccio a "creare un Intent con l'azione Decode specificato" e le due extra stringhe?
-
Quote:
Originariamente inviato da
Ferri
Lui dice:
Per codificare una stringa in un codice QR semplicemente creare un Intent con l'azione Decode specificato, due extra stringa che specifica il tipo e dati e startActivity call ():
codice:
Intent intent = new Intent("com.google.zxing.client.android.ENCODE");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("ENCODE_TYPE", "TEXT_TYPE");
intent.putExtra("ENCODE_DATA","HELLO WORLD");
startActivity(intent)
Ma come faccio a "creare un Intent con l'azione Decode specificato" e le due extra stringhe?
Ciao,
or dunque - prima di cominciare - volevo chiederti se hai correttamente importato nel project (immagino tu usi eclipse) il file android-integrator.jar del barcode scanner zxing e -conseguentemente- incluso nel project le classi di adapter per la cattura del risultato:
IntentIntegrator.java
IntentResult.java
(scaricabili dalla cartella source del programma:
/trunk/android-integration/src/com/google/zxing/integration/android/ - zxing - Multi-format 1D/2D barcode image processing library with clients for Android, Java - Google Project Hosting
Premesso questo, veniamo a come eseguire la scansione e catturare il tipo di ean (magari per te superfluo) e il cod. ean stesso (forse questo ti interessa).
La classe IntentIntegrator.java possiede già il metodo per iniziare la scansione, si chiama .initiatescan.
Tutto quello che devi fare è creare una ulteriore classe che avvii IntentIntegrator.initiateScan() e che catturi il risultato della lettura (intesa come IntentResult), al termine della scansione, con il solito metodo onActivityResult().
Ti faccio un esempio in cui introduco (previe soddisfatte le pre-condizioni di progetto che ti ho indicato a inizio post) una classe di comodo per avviare la scansione e fare il get della lettura + il relativo layout .xml:
Classe AndroidScanner.java:
codice:
package mia.applicazione.test;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
public class AndroidScanner extends Activity {
TextView format=null;
TextView contents=null;
Bundle bundlescanner;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screen3);
format=(TextView)findViewById(R.id.format);
contents=(TextView)findViewById(R.id.contents);
Button confermaScansione = (Button) findViewById(R.id.pulsanteConfermaBarCode);
confermaScansione.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0){
Intent intent = new Intent();
intent.putExtra("formato", format.getText().toString());
intent.putExtra("codiceletto", contents.getText().toString());
setResult(RESULT_OK,intent);
finish();
}
});
}
public void doScan(View v) {
IntentIntegrator.initiateScan(this);
}
public void onActivityResult(int request, int result, Intent i) {
IntentResult scan=IntentIntegrator.parseActivityResult(request,result, i);
if (scan!=null) {
format.setText(scan.getFormatName());
contents.setText(scan.getContents());
}
}
@Override
public void onSaveInstanceState(Bundle state) {
state.putString("format", format.getText().toString());
state.putString("contents", contents.getText().toString());
}
@Override
public void onRestoreInstanceState(Bundle state) {
format.setText(state.getString("format"));
contents.setText(state.getString("contents"));
}
}
Layout utilizzato da AndroidScanner.java (l'ho chiamato screen3.xml):
codice:
<?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"
>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Avvia Scansione!"
android:onClick="doScan"
/>
<TextView android:id="@+id/format"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#FF0000FF"
/>
<TextView android:id="@+id/contents"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/pulsanteConfermaBarCode"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Conferma BarCode"
/>
</LinearLayout>
Noterai che ho utilizzato il metodo android per la gestione degli eventi click dei pulsanti, ovvero valorizzando la proprietà android:onClick
all'interno del file xml (in questo caso lancio il metodo 'doScan' della classe AndroidScanner.java, che non fa altro che lanciare il metodo
InitiateScan della classe IntentIntegrator.java di zxing).
Cosa avviene:
1) il richiamo del metodo doScan() avvia la scansione.
2) viene di fatto aperta l'applicazione zxing direttamente in modalita scansione.
3) alla scansione di un cod. ean valido, automaticamente ritorni alla tua applicazione e vengono passati indietro i dati relativi alla scansione,
(IntentIntegrator.parseActivityResult(request,resu lt, i);) in questo caso io ne prendo solo 2, perchè sono quelli più significativi, ovvero:
.getFormatName() (sarebbe la stringa che denota il tipo di ean rilevato, ad es. EAN 13, EAN 8, ecc...)
.getContents() (questo è il codice a barre, lo puoi memorizzare in una stringa e passarlo al tuo URL, nel mio caso lo visualizzo in un TextView).
E questo è quanto. Tralascio i commenti per il codice rimasto, poichè sarebbero superflui.
Spero che l'utilizzo dell'ottimo sw di zxing ora ti sia maggiormente chiaro e che questo post ti sia stato utile :)
A presto
-
purtroppo è un argomento di cui so poco, una ricerca veloce mi ha portato qua ScanningViaIntent - zxing - Simple scanning on Android, by calling Barcode Scanner via Intent - Multi-format 1D/2D barcode image processing library with clients for Android, Java - Google Project Hosting e qua Using ZXing to create an android barcode scanning app - Stack Overflow.
Leggendo le due cose mi par di capire che consiglino, come sistema più semplice di lettura barcodes, di usare il lettore ufficiale della libreria, e quindi di avviarlo tramite un intent. (Se guardi nel secondo link parlano anche di qualcos, (forse esempi o altro dovrei vedere) per gestire il fatto che questo barcode non sia intallato e reindirizzare l'utente sul market per scaricare l'app corretta.
Quello di cui parli tu, invece a sentimento sembra sia l'uso per fare l'esatto contrario, ovvero usare zxing per generare un codice QR ex novo (ecco perchè vuole le due stringhe extra, perchè devi dirgli come codificare il QR code e che dati ci devi scrivere).
Però già l'esempio di codice che riporti scatena un intent per ENCODE quindi mi aspetto che l'activity che risponde a quell'intent generi il barcode.
Per leggere prova a seguire i link che ti ho passato (io proverei a guardare il secondo, se non è troppo vecchio, non ho cercato di verificare se le info fossero relative a vecchie versioni)
-
Quote:
Originariamente inviato da
pourquoipas
purtroppo è un argomento di cui so poco, una ricerca veloce mi ha portato qua
ScanningViaIntent - zxing - Simple scanning on Android, by calling Barcode Scanner via Intent - Multi-format 1D/2D barcode image processing library with clients for Android, Java - Google Project Hosting e qua
Using ZXing to create an android barcode scanning app - Stack Overflow.
Leggendo le due cose mi par di capire che consiglino, come sistema più semplice di lettura barcodes, di usare il lettore ufficiale della libreria, e quindi di avviarlo tramite un intent. (Se guardi nel secondo link parlano anche di qualcos, (forse esempi o altro dovrei vedere) per gestire il fatto che questo barcode non sia intallato e reindirizzare l'utente sul market per scaricare l'app corretta.
Quello di cui parli tu, invece a sentimento sembra sia l'uso per fare l'esatto contrario, ovvero usare zxing per generare un codice QR ex novo (ecco perchè vuole le due stringhe extra, perchè devi dirgli come codificare il QR code e che dati ci devi scrivere).
Però già l'esempio di codice che riporti scatena un intent per ENCODE quindi mi aspetto che l'activity che risponde a quell'intent generi il barcode.
Per leggere prova a seguire i link che ti ho passato (io proverei a guardare il secondo, se non è troppo vecchio, non ho cercato di verificare se le info fossero relative a vecchie versioni)
doh! :) abbiamo risposto quasi contemporaneamente :D pardon, non volevo sovrappormi ^_^
-
frank17next molto esaustiva la risposta. Ti ringrazio.
C'è qualche punto in cui ho bisogno, non sapendo dove importare. Ad esempio, il file android-integrator.jar credo sia il contenente dei due:
IntentIntegrator.java
IntentResult.java
che non so in quale cartella del progetto importare. Prr il resto adesso adesso creo un nuovo progetto con uguali nome di pacchetto e nome progetto (nome in realtà è uguael :) ) e smanetto un po. A presto, prestissimo!! :)