DevCorner620

DevCorner: leggiamo i QR Code

Roberto Orgiu

Abbiamo finito la nostra carrellata dI articoli sulle autenticazioni e sui vari servizi cloud e social ed è quindi ora di passare ad un nuovo argomento: nell’articolo odierno ci occuperemo quindi di un altro semplice compito, ovvero leggere un QR Code e ritornarne il valore all’Activity principale.

Per implementare questa funzionalità non ci sarà richiesto di specificare alcun permesso o tecnologia particolare nel nostro Manifest, ma tutto quanto verrà messo in atto tramite il java. La prima cosa da fare è avviare il servizio di riconoscimento del codice QR e lo faremo tramite un Intent specifico che utilizzerà la libreria Z-X-ing, alla base di tutti i lettori per Android

Intent scanIntent = new Intent("com.google.zxing.client.android.SCAN");

Una volta creato l’Intent, dobbiamo specificare l’extra, che ci servirà per scegliere la modalità di riconoscimento che, in questo caso, impostiamo proprio sul QR Code.

scanIntent.putExtra("SCAN_MODE","QR_CODE");

Ora non ci resta che lanciare il servizio e attendere il valore di ritorno: chiamiamo quindi startActivityForResult con un codice di richiesta pari a 0.

startActivityForResult(scanIntent,0);

Notiamo che in questo specifico caso abbiamo racchiuso tutti e tre gli statement precedenti in un blocco try-catch: abbiamo preso questa strada perché, nel caso non fossimo in grado di creare l’Intent, saremmo comunque nelle condizioni di redirigere al Play Store il nostro utente, in modo che possa agilmente scaricare uno dei qualsiasi lettori di codici a barre. Al contrario di quanto ci si aspetti, infatti, il nostro Intent non va a chiamare espressamente Barcode Scanner, ma avvia uno qualsiasi dei software che si occupano di questo servizio, come ad esempio QRDroid.

try{
...
}catch(Exception e){
Uri marketUri = Uri.parse("market://details?id=com.google.zxing.client.android");
Intent playStoreIntent = new Intent(Intent.ACTION_VIEW,marketUri);
startActivity(playStoreIntent);
}

Una volta lanciata la nostra Activity, possiamo gestirne il risultato nell’apposito metodo, controllando che il codice di richiesta sia quello che abbiamo specificato nella chiamata.

protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode,resultCode,data);
if(requestCode == 0){

Tra i flag che sono associati all’Intent, quello che a noi interessa è quello relativo al successo dell’operazione di lettura (avremmo potuto controllare anche altri parametri, come l’annullamento del processo da parte dell’utente)

if(resultCode == RESULT_OK)

Ora che abbiamo appurato che è proprio il nostro risultato, non ci resta che estrarre la stringa e utilizzarla come ci serve nella nostra applicazione.

data.getStringExtra("SCAN_RESULT");

Siamo giunti quindi alla fine del nostro tutorial anche per questa settimana e, come ormai è consuetudine, potete trovare tutte le risorse relative a questo tutorial sull’apposito thread del nostro forum. Buona programmazione a tutti!